【问题标题】:what does it mean define macro function as (0)?将宏函数定义为(0)是什么意思?
【发布时间】:2018-09-07 05:02:24
【问题描述】:

我在一些源代码中看到了这种定义

#define somemacro(a,b,c) (0)

我在相同的源代码中看到:

#define anothermacro(a,b,c) (1)

任何机构都可以解释这种宏定义吗?这样定义的目的是什么?

【问题讨论】:

  • 我无法重现该错误。宏定义文字替换。
  • 如果您发布的代码导致分段错误,那么您的编译器有问题
  • 宏扩展为常量,而不是调用函数。我看不出它是如何导致崩溃(分段错误)的——程序应该简单地运行并退出状态为零(如果您使用 C99 或更高版本;如果您使用 C90,则具有不确定的值)。
  • 对所有人来说,我弄错了程序不会崩溃。但是这样定义的目的是什么?
  • 在某些情况下,平台可能不支持该功能。那里应该是条件编译命令,比如#if。如果不是这样,我不知道为什么需要这样做。

标签: c macros c-preprocessor


【解决方案1】:

宏之类的函数通常不使用的参数出现在以下情况:

#ifdef A_IS_GREAT_ALWAYS
  #define anothermacro(a,b,c) (1)
#else
  #define anothermacro(a,b,c) ((a)>(b)+(c))
#endif

如果没有定义 A_IS_GREAT_ALWAYS,它会在以下类型的地方破坏构建。

...
if (anothermacro(foo, bar, baz))
...

预编译器将示例代码翻译成:

  if ((1))

  if (((foo)>(bar)+(baz)))

取决于是否定义了 A_IS_GREAT_ALWAYS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2023-02-09
    • 2020-03-20
    • 2015-03-20
    相关资源
    最近更新 更多