#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进行扩展。
答案 0 :(得分:4)
因为From__
不是Map
中的标记,因此预处理器不会查找它。修复是:
#define Map(From, To, val) \
Map__##From##__##To(val)
答案 1 :(得分:0)
"#define ZERO 0" != "#define ZERO 0_"
同样,在您的代码段中,From != From_
因此不会被替换。
工作解决方案已由@Aniket提供。