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)))