一个预处理器纠结了我好久
最近在实现一个C预处理器,产生一个这样的问题:程序代码:
#define hash_hash # ## # #define mkstr(a) # a | 3 a #define in_between(a) mkstr(a) | 2 #a #define join(c, d) in_between(c hash_hash d) | 1 c hash_hash d char p[] = join(x, y);
执行结果:
char p[] = "x ## y" | 3 x ## y | 2 "x hash_hash y" | 1 x ## y;
其他的先不管,为什么那两个 x ## y 都没有被处理,是哪里出错了呢?因为##是作为参数传递进来的吗?
求引用标准的页码。