i 可不简单 2023-09-06 12:07 采纳率: 25%
浏览 6

C语言表达式求值顺序

对于表达式ab + cd + e*f ,我们佬师说第三个 * 和第一个 + 的执行顺序未知,即有以下两种情况:
情况1:

a*b
c*d
a*b + c*d
e*f
a*b + c*d + e*f

情况2:

a*b
c*d
e*f
a*b + c*d 
a*b + c*d + e*f

请问是否存在问题,如果有问题,请指出问题;如果没问题,请解释顺序未知的原因。
谢谢!!



  • 写回答

2条回答 默认 最新

  • threenewbee 2023-09-06 12:25
    关注

    编译器并不关心所谓求值顺序,关心的是结果的等价性
    简单来说
    a+b+c,既可以是先算a+b,结果+c,也可以是先算b+c,结果再加a
    那么编译器编译出来的代码,究竟先算谁其实不重要。
    再比如,就算编译器编译a+b+c+d得到
    add a,b
    add c,d
    add a,c
    这样的汇编代码,但是对于现代的超标量处理器
    add a,b和add c,d很可能是同时发射的。
    所以说,讨论代码求值顺序唯一的意义在于,这只是一个基准参照,也就是说编译器无论怎么弄,结果和这个参照的顺序相同
    但是不意味着这个参照就是代码真实被执行的顺序

    评论

报告相同问题?

问题事件

  • 修改了问题 9月6日
  • 创建了问题 9月6日

悬赏问题

  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开