C 标准给出了以下示例:
#define hash_hash # ## #
#define mkstr(a) # a
#define in_between(a) mkstr(a)
#define join(c, d) in_between(c hash_hash d)
char p[] = join(x, y); // equivalent to char p[] = "x ## y";
但它也说“未指定 # 和 ## 运算符的评估顺序。”
为什么hash_hash
保证的扩展被解释为应用于#的##运算符,而不是应用于##的#运算符?