[英]Create object-like macro from concatenation of token and macro
我想从令牌和宏的连接创建一个类似对象的宏。 我有以下代码:
#define alfa vita
/* Code below is broken. */
#define gamma delta##alfa
gamma
gamma
被deltaalfa
代替。 我要用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.