如果使用的#define
没有值,例如
#define COMMAND_SPI()
默认值是否为0?
答案 0 :(得分:7)
不,它的评价为零。从字面上看,这个符号一无所获。
但是,一旦有#define FOO
,预处理器条件#ifdef FOO
现在就为真。
另请注意,在gcc
以及可能的其他编译器中,如果在命令行上定义了一个带有-DFOO
的宏,则默认情况下评估为1
。
由于OP更新了他的问题以引用类似函数的宏,让我们考虑一个小例子。
#define FOO
#define BAR()
FOO
BAR
BAR()
这不是有效的C
程序,但预处理器并不关心。
如果我使用gcc -E Input.c
进行编译,则会显示空白,然后是BAR
,后跟另一个空白。这是因为第一个和第三个表达式计算为虚无,而中间表达式未扩展,因为后面没有()
。