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

Pie*_*tro 2 c++ macros gcc c-preprocessor

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

#define VALUE1 123
...
#define VALUE1 345
...
// Reset the original value
#define VALUE1 123
Run Code Online (Sandbox Code Playgroud)

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

Adr*_*tti 5

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

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

#define VALUE 1

#undef VALUE
#define VALUE 2

#undef VALUE
#define VALUE 3
Run Code Online (Sandbox Code Playgroud)

只是为了获取信息,您甚至可以禁用该警告, #pragma GCC diagnostic ignored但即使在这种情况下,您最好写一些东西来解释原因.

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