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

时间:2017-09-12 22:52:57

标签: c gcc macros

我们假设我们有一个宏定义为

#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吗?

1 个答案:

答案 0 :(得分:6)

预处理器适用于令牌。 e本身就是一个令牌,而e中的temp只是一个较大的temp令牌的一部分。 ##仅适用于令牌。

此外,粘贴必须生成一个令牌。因此,粘贴.a无效; temp.a##e是正确的,并将ae粘贴到temp.<a><e>,其中<a><e>a的替换文本}和e