在C中使用#define没有值

use*_*780 4 c macros

如果a #define使用没有值,比如

#define COMMAND_SPI()
Run Code Online (Sandbox Code Playgroud)

它默认值为0吗?

mer*_*011 7

不,它评估为零.从字面上看,这个符号一无所获.

但是,一旦有了#define FOO,预处理器条件#ifdef FOO现在将成立.

另请注意,在gcc可能的其他编译器中,如果-DFOO在命令行上定义一个宏,则1默认情况下计算结果为.


由于OP更新了他的问题以引用类似函数的宏,让我们考虑一个小例子.

#define FOO
#define BAR()


FOO
BAR
BAR()
Run Code Online (Sandbox Code Playgroud)

这不是一个有效的C程序,但预处理器并不关心.如果我用它编译gcc -E Input.c,我得到一个空白,BAR然后是另一个空白.这是因为第一个和第三个表达式评估为虚无,而中间表达式未扩展,因为()之后没有.