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
、##に適用される#演算子ではなく、#に適用される##演算子として解釈されることが保証されているのはなぜですか?