【发布时间】:2021-09-07 07:20:04
【问题描述】:
根据我对GCC documentation的理解,下面的测试代码显示,命令行上的-DMY_FLAG给符号MY_FLAG一个非零值:
#include <stdio.h>
void main(void)
{
#if MY_FLAG
printf("MY_FLAG\n");
#else
printf("hello, world!\n");
#endif
}
$ gcc -DMY_FLAG test.c && ./a.out
MY_FLAG
$ gcc -DMY_FLAG=0 test.c && ./a.out
hello, world!
$ gcc -DMY_FLAG=1 test.c && ./a.out
MY_FLAG
$ gcc test.c && ./a.out
hello, world!
$ gcc -Wundef test.c && ./a.out
test.c: In function ‘main’:
test.c:5:5: warning: "MY_FLAG" is not defined, evaluates to 0 [-Wundef]
5 | #if MY_FLAG
| ^~~~~~~
hello, world!
这是预期的行为吗?如果是,那为什么? MY_FLAG 在-DMY_FLAG 之后的值是多少,即没有明确地为其赋值,例如-DMY_FLAG=1?
【问题讨论】: