当我们不在宏替换中给出值时。
#define YES
printf("%d",YES)
YES的值没有给出,是默认0还是垃圾?
您刚刚将 YES 定义为nothing。所以预处理器后的结果程序应该是printf("%d",)
也没有,没有价值。
这种用法通常在以下情况下很有用:
#define _VXWORKS
稍后,检查是否已定义宏。
#ifdef _VXWORKS
//do something
#else
//do something else
#endif
我会很惊讶它编译
由于命中编译器的代码是
printf("%d",)
!!
C 预处理器对令牌进行操作。的宏定义YES
说用无标记替换标记 YES,有效地删除 YES 标记。所以,宏替换后的结果是
printf ("%d",)
正如您所观察到的,这是一个语法错误。
与未初始化的自动变量不同,宏替换总是定义明确的,因此您不能将不确定的值(“垃圾”)作为宏扩展的结果。
没有什么
你会使用 GCC :你可以找到这样的:
gcc prog.c -E -P