宏串联,函数名称生成 [英] Macro concatenation, function name generation
本文介绍了宏串联,函数名称生成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
#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);
In the above code I am wondering why Map(TYPEA, TYPEB, 22);
is getting expanded to Map__From__TYPEB(22);
and not Map__TYPEA__TYPEB(22);
我使用gcc -E进行扩展.
I used gcc -E for expansion.
推荐答案
因为 From __
不是 Map
中的标记,因此预处理器不会对其进行查找.修复方法是:
Because From__
is not a token in Map
and hence, preprocessor does not look it up.. fix is :
#define Map(From, To, val) \
Map__##From##__##To(val)
这篇关于宏串联,函数名称生成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文