宏值未定义

时间:2013-06-09 07:16:03

标签: c macros garbage

当我们不在宏替换中给出值时。

#define YES
printf("%d",YES)

没有给出YES的值,默认是0还是垃圾?

5 个答案:

答案 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