我没有定义符号 SYMBOL1 和 SYMBOL2,当我看到以下代码中调用 printf 时,我感到很惊讶:
#include <stdio.h>
int main()
{
#if (SYMBOL1==SYMBOL2)
printf("Hello World");
#endif
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您能解释一下原因吗?有什么参考标准吗?
根据 ISO C 标准 ( C11 6.10.1 Conditional inclusion):
在执行完所有由于宏扩展和定义的一元运算符引起的替换后,所有剩余的标识符(包括词法上与关键字相同的标识符)都被替换为 pp-number 0,然后将每个预处理标记转换为标记。生成的标记组成了计算的控制常量表达式...
换句话说,你的表达式变成了0 == 0,这显然是正确的。因此,它printf包含在源流中。
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |