같은 이름의 매크로를 중복으로 정의하면 error가 아닌 warning이 발생한다.
#include <stdio.h>
#define ABC 1 // duplicated!
#define ABC 2 // duplicated!
int main(void)
{
printf("%d\n", ABC);
return 0;
}
# gcc -o a a.c
a.c:4:0: warning: "ABC" redefined
#define ABC 2
a.c:3:0: note: this is the location of the previous definition
#define ABC 1
# ./a
2
이 경우 매크로의 값은 가장 아랫줄에 정의된 값으로 정해진다. (ABC = 2)
전처리기가 파일을 위에서부터 읽으면서 안 건너뛰고 성실히 수행하는 듯.
중복으로 3개, 7개씩 정의해봐도 가장 아래에 정의된 값으로 출력되었다.
참고
# gcc -v
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)