繁体   English   中英

通过令牌和宏的连接创建类似对象的宏

[英]Create object-like macro from concatenation of token and macro

我想从令牌和宏的连接创建一个类似对象的宏。 我有以下代码:

#define alfa vita
/* Code below is broken. */
#define gamma delta##alfa
gamma

gammadeltaalfa代替。 我要用deltavita代替它。 我怎样才能做到这一点?

我不希望伽玛像函数一样的宏。


##预处理程序运算符和陷阱需要考虑哪些应用?
这个问题很广泛。 它不关注我的问题,第一个答案也没有解决。

您必须像这样执行双重宏扩展:

#define alfa vita

#define concat2(a,b) a ## b
#define concat(a,b) concat2(a,b)
#define gamma concat(delta, alfa)

gamma

字符串化( # )和令牌粘贴( ## )运算符的操作数不首先扩展。 作为一种特殊情况,函数式宏的扩展首先通过扩展参数( 除非它们是###运算符的操作数)进行扩展,然后将其替换为宏主体,然后重新扫描以查找替换项。

上面的双扩展方法之所以有效,是因为concat()宏的参数不是## (或# )的操作数。 因此,它们先被扩展,然后被替换为该宏的主体以产生

concat2(delta, vita)

重新扫描后,将其进一步扩展到

delta ## vita

(无论符号vita任何宏定义如何),然后将其粘贴到单个标记中以产生结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM