宏连接,函数名称生成

时间:2013-03-20 11:21:41

标签: c macros concatenation c-preprocessor

#define Map(From, To, val)          \
        Map__##From__##To(val)


Map(TYPEA, TYPEB, 22);

在上面的代码中,我想知道为什么Map(TYPEA, TYPEB, 22);扩展到Map__From__TYPEB(22);而不是Map__TYPEA__TYPEB(22);

我使用gcc -E进行扩展。

2 个答案:

答案 0 :(得分:4)

因为From__不是Map中的标记,因此预处理器不会查找它。修复是:

#define Map(From, To, val) \
        Map__##From##__##To(val)

答案 1 :(得分:0)

"#define ZERO 0" != "#define ZERO 0_"

同样,在您的代码段中,From != From_因此不会被替换。 工作解决方案已由@Aniket提供。