假设我们有一个定义的宏
#define VALUE_ENTRY(a, b, c, d, e, f, g) \
case E_##a##e: temp.a##e = d; break;
Run Code Online (Sandbox Code Playgroud)
预处理器如何知道'temp'中的'e'不应该扩展?是不是因为没有##在'e'面前?
此外,应该temp.a##e是temp.##a##e?
预处理器适用于令牌.e它本身就是一个标记,而ein temp只是一个字符,它是较大temp标记的一部分.##仅适用于令牌.
此外,粘贴必须产生一个令牌.因此,粘贴.并a无效; temp.a##e是正确的,膏a和e形成temp.<a><e>,其中<a>和<e>是的替换文本a和e.