秒杀774 2022-01-13 11:19 采纳率: 90%
浏览 32

这个没太懂,哪个悟性高的帮我看一看

、带参数的宏带参数的仍要遵循上述规则,区别只是宏名后面紧跟的圆括号中放置了参数,就像真正的函数那样。#define <宏名>(<参数列表>) <宏体>注意参数列表中的参数必须是有效的c标识符,同时以,分隔算符优先级问题:

#define COUNT(M) M*M
int x=5;注意:

预编译器只是进行简单的文本替换,COUNT(x+1)被替换成COUNT(x+1x+1),5+15+1=11,而不是36
CUNT(++x)被替换成++x*++x即为67=42,而不是想要的66=36,连续前置自加加两次
解决办法:

用括号将整个替换文本及每个参数用括号括起来print(COUNT((x+1));
即便是加上括号也不能解决第二种情况,所以解决办法是尽量不使用++,-等符号;
分号吞噬问题:
print(COUNT(x+1));
print(COUNT(++X));
//结果输出:11 和42 而不是函数的输出36

  • 写回答

2条回答 默认 最新

  • "Jerome" 2022-01-13 11:44
    关注

    img


    只是进行个替换,不会加括号,很简单的

    评论

报告相同问题?

问题事件

  • 修改了问题 1月13日
  • 创建了问题 1月13日