nypeng_ 2022-04-18 21:49 采纳率: 0%
浏览 99

今天翻书看到了一个很经典的宏定义下的错误,即#define square(x) (x)*(x),但将x赋值为a++以后输出咱就弄不明白了,虚心求解答

今天翻书在学习基本c++语法的时候看到了一个很经典的宏定义下的错误,即#define square(x) (x)*(x),但将x赋值为a++以后输出咱就看不懂了,虚心求解答。
编译器:vs2022
c++语言
下面是三个有疑惑的例子:

img

img

img

  • 写回答

3条回答 默认 最新

  • 小宁子想不到 2022-04-21 13:57
    关注

    宏定义只是进行了一次替换相当于cout<<(a++)(a++)<<" "<<(++a)(++a)<<a
    你对比运算顺序可以看出来 ++运算在*运算和输出运算前.

    和编译器也有原因你用gcc编译结果也不一样

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月18日

悬赏问题

  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错