防止简单的宏替换

j5w*_*j5w 1 c c++

如何防止简单的宏替换?

例如

#define number 0x10

int number = 0x5;
Run Code Online (Sandbox Code Playgroud)

我知道这可以通过用括号将宏括起来(因此,将它与用于 args 的相邻括号分开)来为函数样式的宏完成,例如minand max

#define max(...)

void (max)();
Run Code Online (Sandbox Code Playgroud)

我目前的方法是推送宏值,取消定义,使用它,然后弹出原始值。

Jab*_*cky 6

您无法阻止宏替换。

这就是为什么宏通常都是大写的原因之一:

#define NUMBER 0x10

int number = 0x5;    // no problem here.
Run Code Online (Sandbox Code Playgroud)

甚至这当然可以做到:

int number = NUMBER;  // even this can be done of course
Run Code Online (Sandbox Code Playgroud)