C宏在另一个C宏中扩展

时间:2018-05-04 12:32:37

标签: c

我有类似的东西:

#define NBR 42
#define THE_ANS_IS theAnsIsNBR

目前第二个宏正如预期的那样扩展为'theAnsIsNBR',但我想将它扩展为'theAnsIs42'我不确定它是否可能!?

2 个答案:

答案 0 :(得分:2)

#define Paste(x, y)  x##y
#define Expand(x, y) Paste(x, y)

#define NBR 42
#define THE_ANS_IS Expand(theAnsIs, NBR)

答案 1 :(得分:1)

#define _CONCAT(x,y) x ## y
#define CONCAT(x,y) _CONCAT(x,y)

#define NBR 42
#define THE_ANS_IS CONCAT(theAnsIs, NBR)

这是有效的,因为##连接了两个令牌。问题是,它们不会首先扩展。但是在它们上调用另一个宏会扩展它们,因此你需要在这里嵌套两个类似函数的宏。