2013-02-23 2 views
0

:C 기호 상수 + 다음 코드 조각을 감안할 때 strcture

질문은 "왜 [위에 표시]이 줄 태클의 가능한 수에 1을 추가 하는가?"였다 나에게 제기
#include <stdio.h> 
#include <stdlib.h> 
#define MAX_SIZE 15 

typedef struct{ 
    int touchdowns; 
    int interceptions; 
    int tackles[MAX_SIZE + 1];  //this is the line in question 
}stats; 

---- 왜 그렇게 원하지 않겠지 만 어떻게/왜 작동합니까? 다른 단어의 유효한 코드인데, 반드시 유효한 논리가 아닌 이유는 무엇입니까? -Classification

이 질문에 대한 답변을 확신 할 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

1

MAX_SIZE는 코드를 컴파일 할 때 (100)에 의해 대체되고 라인 documentation 가입일

int tackles[101]; 



와 동일

int tackles[100 + 1]; 

하게된다 처리기 매크로를 정의하는

을 #define을 사용할 수 있습니다. 그 형식은 다음

#define identifier replacement 

전처리가이 지시자를 만나면 교환하여 나머지 코드 식별자 중 발생을 대체한다. 이 대체 표현식, 문장, 블록 또는 단순히 아무것도 수 있습니다. 선행 처리기는 C++을 이해하지 못하기 때문에 단순히 대체를 통해 식별자를 대체합니다. 전처리가 TABLE_SIZE 교체 후

#define TABLE_SIZE 100 
int table1[TABLE_SIZE]; 
int table2[TABLE_SIZE]; 

는 코드에 해당된다 : tackles 터미네이터 값 종료 배열이기 때문에 아마도

int table1[100]; 
int table2[100]; 
+0

나는 그것이 내가 문제의 시험을 치르는 것이라고 생각하지만 나는 표를했다. – SystemFun

+0

좋아, 고마워, 기본적으로 내가 쓴 것 같은데. "구조의 인스턴스가 만들어지면 심볼 상수가 숫자 100으로 바뀌므로 100 + 1이 유효합니다. 작업을 잘해 주셔서 감사합니다. – SystemFun

+0

>> 구조체의 인스턴스가 만들어지면 기호식이 잘못되었습니다. 코드를 컴파일하기 직전에 MAX_SIZE가 바뀝니다. " –

0

(-1 등), 유사 방법 C 문자열은 널 문자로 종료됩니다. 구조체에 태클 수를 나타내는 멤버가없는 것에 유의하십시오.

+0

최근의 clairifaction을 고려해보십시오. 논리가 아닌 유효한 코드가 왜 문제가됩니까? 제가 혼란 스럽다면 죄송합니다. – SystemFun

+0

@Vlad이 경우 나는 전혀 이해하지 못합니다. 코드는 그렇지 않습니다. 유효 할 수있는 이유가 필요합니다. 그러나 추측한다면, [Sam 's answer] (http://stackoverflow.com/a/15045136/1600898)가 면접관이 목표로했던 것과 가장 가까운 것일 수 있습니다. – user4815162342

2

Armin이 지적했듯이 토큰 MAX_SIZE은 전처리기로 바뀝니다. 그러나 명확히하기 위해, 그것이 결국 작동/컴파일되지 않습니다. 이것을 컴파일하기위한 실제 요구 사항은 배열 크기가 상수 인 식이며 문제의 코드에 적용된다는 것입니다.

관련 문제