【发布时间】:2018-10-14 22:46:18
【问题描述】:
我有类似的东西:
#define NBR 42
#define THE_ANS_IS theAnsIsNBR
目前第二个宏按预期扩展为“theAnsIsNBR”,但我希望它扩展为“theAnsIs42”,我不确定它是否可能!?
【问题讨论】:
-
我认为我们需要为
##运算符提供一个规范的副本,因为这是一个很常见的常见问题解答。有人吗?
标签: c
我有类似的东西:
#define NBR 42
#define THE_ANS_IS theAnsIsNBR
目前第二个宏按预期扩展为“theAnsIsNBR”,但我希望它扩展为“theAnsIs42”,我不确定它是否可能!?
【问题讨论】:
## 运算符提供一个规范的副本,因为这是一个很常见的常见问题解答。有人吗?
标签: c
#define Paste(x, y) x##y
#define Expand(x, y) Paste(x, y)
#define NBR 42
#define THE_ANS_IS Expand(theAnsIs, NBR)
【讨论】:
#define _CONCAT(x,y) x ## y
#define CONCAT(x,y) _CONCAT(x,y)
#define NBR 42
#define THE_ANS_IS CONCAT(theAnsIs, NBR)
这是因为## 连接了两个标记。问题是,它们没有首先扩展。但是在它们上调用另一个宏会扩展它们,因此您需要在此处嵌套两个类似函数的宏。
【讨论】: