在C中使用#define没有值

时间:2014-06-12 22:53:24

标签: c macros

如果使用的#define没有值,例如

#define COMMAND_SPI()

默认值是否为0?

1 个答案:

答案 0 :(得分:7)

不,它的评价为零。从字面上看,这个符号一无所获。

但是,一旦有#define FOO,预处理器条件#ifdef FOO现在就为真。

另请注意,在gcc以及可能的其他编译器中,如果在命令行上定义了一个带有-DFOO的宏,则默认情况下评估为1


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

#define FOO
#define BAR()


FOO
BAR
BAR()

这不是有效的C程序,但预处理器并不关心。 如果我使用gcc -E Input.c进行编译,则会显示空白,然后是BAR,后跟另一个空白。这是因为第一个和第三个表达式计算为虚无,而中间表达式未扩展,因为后面没有()