【问题标题】:Why is #define used after an #undef directive? [duplicate]为什么在#undef 指令之后使用#define? [复制]
【发布时间】:2022-01-04 05:09:08
【问题描述】:

我正在审查开源 FANN 库。据我研究,为该项目做出贡献的开发人员在 C 编程方面经验丰富。但我想知道为什么他们在doublefann.h 文件中执行以下操作:

#undef DOUBLEFANN
#define DOUBLEFANN

使用#undef 删除标识符然后使用#define 重新定义它的目的是什么?

【问题讨论】:

  • 要么是错误,要么是为了确保 DOUBLEFANN 没有值
  • 如果不先删除,如果宏已经定义,则会报错,因为不允许重新定义宏。
  • 允许并忽略重新定义具有相同定义的宏,但

标签: c preprocessor


【解决方案1】:

我不认为有什么秘密;只是该代码的作者想要覆盖 DOUBLEFANN 的任何现有预处理器值(例如,由某个头文件中的前一行设置,或者可能由编译器命令行上的 -DDOUBLEFANN=something 参数提供) 并将其替换为他自己对DOUBLEFANN 的定义,作为已定义的具有空值的预处理器宏。

至于为什么作者觉得有必要这样做,我不知道。

【讨论】:

  • 有趣的是他们不会为其他宏这样做。
  • @Barmar 可能这是一种解决方法,因为他收到了警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2018-10-11
  • 1970-01-01
相关资源
最近更新 更多