当我们不在宏替换中给出值时。
#define YES
printf("%d",YES)
没有给出YES的值,默认是0还是垃圾?
答案 0 :(得分:6)
您刚刚为没有定义了YES。因此预处理器之后的结果程序应为printf("%d",)
答案 1 :(得分:2)
我很惊讶它编译
因为代码击中了编译器
printf("%d",)
!!
答案 2 :(得分:2)
C预处理器在 令牌 上运行。 YES
的宏定义表示在没有令牌的情况下替换令牌YES,有效地删除了YES令牌。因此,宏替换后的结果是
printf ("%d",)
这是您观察到的语法错误。
与未初始化的自动变量不同,宏替换总是定义得很好,因此宏扩展不会产生不确定的值(“垃圾”)。
答案 3 :(得分:1)
两者都没有价值。
这种用法在以下情况下通常很有用:
#define _VXWORKS
稍后,检查宏是否已定义。
#ifdef _VXWORKS
//do something
#else
//do something else
#endif
答案 4 :(得分:1)
没有
你会使用GCC:你可以找到这样的:
gcc prog.c -E -P