C预处理器标记化不会扩展宏?

时间:2014-03-13 04:59:15

标签: c gcc macros c99 c-preprocessor

1)为什么宏MSG未在以下表达式中展开?

#define MSG Hello
#define HELLO(name)  MSG ## name

void HELLO(Dave) () {}

使用

gcc -E -P test.cpp 

输出:

void MSGDave () {}

MSG name扩展为Hello Dave。并MSG # name扩展为Hello "Dave"。那么是什么导致gcc不能扩展MSG ## name

2)有解决方法吗?

是否有像预定义(x)这样的预处理程序指令,例如expand(x)?

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:3)

#define MSG Hello
#define cat(x, y) x ## y
#define cat2(x, y) cat(x, y)
#define HELLO(name) cat2(MSG,name)

Live demo @ ideone