如果a #define使用没有值,比如
#define COMMAND_SPI()
Run Code Online (Sandbox Code Playgroud)
它默认值为0吗?
不,它评估为零.从字面上看,这个符号一无所获.
但是,一旦有了#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然后是另一个空白.这是因为第一个和第三个表达式评估为虚无,而中间表达式未扩展,因为()之后没有.