为什么这段代码会出错?

时间:2015-06-18 12:57:28

标签: c macros output

#define cat(x,y) x##y
main()
{
    printf("%d",cat(cat(cat(3,3),cat(3,4)),5));
}

为什么会出错? 根据我的知识,O / P应该是

    cat(cat(3,3),cat(3,4)),5

因为连接内部宏不会扩展。为什么不发生这种情况?

2 个答案:

答案 0 :(得分:3)

间接打电话。

#define cat_(x,y) x##y
#define cat(x,y) cat_(x,y)

答案 1 :(得分:1)

如果宏定义的替换列表中出现多个##运算符和/或#运算符,则不定义运算符的计算顺序。

<强> Read more here