在代码中修改预处理器宏是一种好的风格吗

Is it a good style to modify a preprocessor macro in the code?

本文关键字:一种 风格 修改 代码 预处理 处理器      更新时间:2023-10-16

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

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

编译器(GCC)对重新定义给出了警告。

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

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

#define VALUE 1
#undef VALUE
#define VALUE 2
#undef VALUE
#define VALUE 3

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

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