在代码中修改预处理器宏是一种好方法吗?

时间:2013-09-02 15:20:53

标签: c++ gcc macros c-preprocessor

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

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

编译器(GCC)向我发出有关重新定义的警告。

1 个答案:

答案 0 :(得分:5)

它会向您发出警告,因为大多数时候它都是不需要的:您正在为现有宏分配值,因为您不知道它存在。

当你不得不这样做时,IMO要更明确一些(让预处理器知道这不是一个错误,并让人类读者清楚):

#define VALUE 1

#undef VALUE
#define VALUE 2

#undef VALUE
#define VALUE 3

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

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