【问题标题】:Is it a good style to modify a preprocessor macro in the code?在代码中修改预处理器宏是一种好方法吗?
【发布时间】:2013-09-02 15:20:52
【问题描述】:

我有一些定义宏 VALUE1 的代码。在部分代码中,我需要更改该值。
这是正确的方法吗?

#define VALUE1 123
...
#define VALUE1 345
...
// Reset the original value
#define VALUE1 123

编译器 (GCC) 给我一个关于重新定义的警告。

【问题讨论】:

  • 为什么不使用具有各种值的enum
  • @Mahesh 我需要它来进行条件编译,所以我需要与预处理器交谈。

标签: c++ gcc macros c-preprocessor


【解决方案1】:

它会给你一个警告,因为大多数时候它是不需要的:你正在为现有宏分配一个值,因为你不知道它存在。

当你必须这样做时,IMO 最好更明确(让预处理器知道这不是错误并让人类读者也清楚):

#define VALUE 1

#undef VALUE
#define VALUE 2

#undef VALUE
#define VALUE 3

您甚至可以使用#pragma GCC diagnostic ignored 禁用该警告,但即使在这种情况下,您最好写一些东西来解释原因。

也就是说你可以考虑审查你的设计,如果没有关于你的代码(或你想要实现的目标)的更多信息,我不能说更好,但如果你需要这样的技巧,可能需要一点重构 会让一切变得更加清晰。

【讨论】:

  • 阿德里亚诺,当我重新定义宏时,我认为#undef 是隐含的。感恩!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2018-01-03
  • 1970-01-01
  • 2016-10-26
  • 2011-12-22
相关资源
最近更新 更多