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日