秒杀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日

悬赏问题

  • ¥15 Arcgis河网分级报错
  • ¥200 java+appium2.1+idea
  • ¥20 请帮我做一个EXE的去重TXT文本
  • ¥15 工价表引用工艺路线,应如何制作py和xml文件
  • ¥15 根据历史数据,推荐问题类型
  • ¥15 需要仿真图,简单的二阶系统实例
  • ¥15 stm32光控照明仿真
  • ¥15 使用人工智能的方法生成满足一定统计参数要求的随机数序列
  • ¥15 SENT协议中相关问题咨询
  • ¥15 URL地址href跳转问题