C预处理器如何知道扩展什么以及不扩展什么?

ph1*_*ash 4 c macros gcc

假设我们有一个定义的宏

#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##etemp.##a##e

chr*_*ris 6

预处理器适用于令牌.e它本身就是一个标记,而ein temp只是一个字符,它是较大temp标记的一部分.##仅适用于令牌.

此外,粘贴必须产生一个令牌.因此,粘贴.a无效; temp.a##e是正确的,膏ae形成temp.<a><e>,其中<a><e>是的替换文本ae.