fre*_*low 15 c c++ c-preprocessor
我对预处理器如何工作的心理模型显然是不完整的,这让我发疯.
我想连接两个标记,但第二个标记应该首先扩展.
#define ANSWER 42
#define FOO foo_ ## ANSWER
Run Code Online (Sandbox Code Playgroud)
在这里,FOO扩展到foo_ANSWER,但我希望它foo_42.所以我定义了一个MERGE宏,希望在连接之前以某种方式扩展参数:
#define MERGE(x, y) x ## y
#define BAR MERGE(bar_, ANSWER)
Run Code Online (Sandbox Code Playgroud)
但BAR仍然扩大到bar_ANSWER而不是bar_42.所以我定义了另一个宏HELPER:
#define HELPER(x, y) MERGE(x, y)
#define BAZ HELPER(baz_, ANSWER)
Run Code Online (Sandbox Code Playgroud)
现在BAZ已成功扩展到baz_42.目前,这对我来说似乎很神奇.
任何人都可以向我解释这种行为吗?扩展规则如何正常工作?
| 归档时间: |
|
| 查看次数: |
7750 次 |
| 最近记录: |