1

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

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

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

4

5 回答 5

6

您刚刚将 YES 定义为nothing。所以预处理器后的结果程序应该是printf("%d",)

于 2013-06-09T07:18:44.807 回答
2

也没有,没有价值。

这种用法通常在以下情况下很有用:

#define _VXWORKS

稍后,检查是否已定义宏。

#ifdef _VXWORKS
//do something
#else
//do something else
#endif
于 2013-06-09T07:19:25.477 回答
2

我会很惊讶它编译

由于命中编译器的代码是

printf("%d",)

!!

于 2013-06-09T07:22:00.017 回答
2

C 预处理器对令牌进行操作。的宏定义YES说用无标记替换标记 YES,有效地删除 YES 标记。所以,宏替换后的结果是

 printf ("%d",)

正如您所观察到的,这是一个语法错误。

与未初始化的自动变量不同,宏替换总是定义明确的,因此您不能将不确定的值(“垃圾”)作为宏扩展的结果。

于 2013-06-09T07:25:53.413 回答
1

没有什么

你会使用 GCC :你可以找到这样的: gcc prog.c -E -P

于 2013-06-09T07:20:25.553 回答