宏串联,函数名称生成 [英] Macro concatenation, function name generation

查看:54
本文介绍了宏串联,函数名称生成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆