전처리 기가 매크로를 처리하여 컴파일러로 가져 오기 전에 구문 오류를 생성하지 않는 한 #define
및 #include
은 어디에서나 작성할 수 있다는 인상을 받았습니다.C 코드에서`# define '의 위치가 중요합니까?
나는 다음과 같은 코드를 실행 :
#include <stdio.h>
int main(void) {
int B = A;
#define A 4
printf("%d", B);
return 0;
}
을하며 다음과 같은 오류 발생 :
prog.c: In function 'main': prog.c:4:13: error: 'A' undeclared (first use in this function) int B = A; ^prog.c:4:13: note: each undeclared identifier is reported only once for each function it appears in
을하지만이 작업을 수행 할 때, 그것을 작동합니다!
#include <stdio.h>
int main(void) {
#define A 4
int B = A;
printf("%d", B);
return 0;
}
확실하지 내가 여기없는,하지만 컴파일러는 오류 "선언되지 않은 A"를 줄 않는 이유는 무엇입니까?
는 있도록되어 전처리가#define A 4
라인을 판독 할 때 코드의 후속 행에서 모든
A
4
로 대체를 시작합니까?
아니요. 전처리 지시문을 어디에 두는가가 중요합니다. 또한 컴파일 타임에 오류가없는 것은 유효한 프로그램에 대한 필수 조건이지만 확실히 충분하지는 않습니다. –