C 将宏函数定义为(0)是什么意思?
我在一些源代码中看到了这种定义C 将宏函数定义为(0)是什么意思?,c,macros,c-preprocessor,C,Macros,C Preprocessor,我在一些源代码中看到了这种定义 #define somemacro(a,b,c) (0) 我在相同的源代码中看到: #define anothermacro(a,b,c) (1) 有人能解释这种宏观定义吗?这种定义的目的是什么?通常,函数(如宏)的未使用参数出现在以下情况: #ifdef A_IS_GREAT_ALWAYS #define anothermacro(a,b,c) (1) #else #define anothermacro(a,b,c) ((a)>(b)+(c)
#define somemacro(a,b,c) (0)
我在相同的源代码中看到:
#define anothermacro(a,b,c) (1)
有人能解释这种宏观定义吗?这种定义的目的是什么?通常,函数(如宏)的未使用参数出现在以下情况:
#ifdef A_IS_GREAT_ALWAYS
#define anothermacro(a,b,c) (1)
#else
#define anothermacro(a,b,c) ((a)>(b)+(c))
#endif
如果没有参数,它将在以下类型的地方破坏构建,当一个_是_GREAT_时,总是没有定义
...
if (anothermacro(foo, bar, baz))
...
预编译器将示例代码转换为:
if ((1))
或
取决于A_是否总是定义好。我无法重现错误。宏定义文字替换。如果您发布的代码导致分段错误,则说明编译器有问题,而不是调用函数,宏将扩展为常量。我不明白它怎么会导致崩溃(分段错误)-程序应该简单地运行并以零状态退出(如果使用C99或更高版本;如果使用C90,则具有不确定的值)。总之,我犯了一个错误,程序不会崩溃。但这样定义的目的是什么?在某些情况下,平台可能不支持该功能。这里应该是条件编译命令,如
#if
。如果不是这样,我也不明白为何要这样做。
if (((foo)>(bar)+(baz)))