我们假设我们有一个宏定义为
#define VALUE_ENTRY(a, b, c, d, e, f, g) \
case E_##a##e: temp.a##e = d; break;
预处理器如何知道' e'在临时'不应该扩大?是因为没有##
在' e'?
此外,temp.a##e
应该temp.##a##e
吗?
答案 0 :(得分:6)
预处理器适用于令牌。 e
本身就是一个令牌,而e
中的temp
只是一个较大的temp
令牌的一部分。 ##
仅适用于令牌。
此外,粘贴必须生成一个令牌。因此,粘贴.
和a
无效; temp.a##e
是正确的,并将a
和e
粘贴到temp.<a><e>
,其中<a>
和<e>
是a
的替换文本}和e
。