作者cuttheshit (科特落雪)
看板C_and_CPP
标题[问题] 什麽情况下会从後往前做运算?
时间Sat May 11 04:06:23 2019
其实这个问题不用看完整的程式码也没关系,以防万一还是附上
想问的是例如这种运算式:
c=sub1(a,&b)+sub2(&a,b);
(完整程式码)
https://ideone.com/QYBURk
已知sub1.2两只副程式若以"传址"方式进行传递的部分,皆会改动到原本的变数内容
(因为这两个副程式刚好是相对的,先假设这两个副程式进去後的处理差很多)
单以这条式子来看,手动追踪的话是从 左边算到右边
但又有一种情况是:
printf("%d\n%d\n%d\n%d\n",a+b+c+d,(b*=a),(a+=d),(d++));
(完整程式码)
https://ideone.com/jVvX5m
却又必须从右边算回左边... 说是实务上很多编译器会 从右往左 进行解析
现在观念有些混淆了,究竟看到一条运算式,在什麽情况下才会从右到左
或从左到右呢? 有较明确的判断方式吗?
谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.176.69.252
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1557518789.A.14D.html
1F:→ adrianshum: 参看第八诫。 05/11 07:36
2F:推 Schottky: 置底十三诫之第八诫,突然觉得十三诫好实用啊 05/11 09:04
3F:推 b0920075: 为什麽推文都知道是哪一诫XD 05/11 10:07
4F:→ sarafciel: 因为这个问题已经是老梗了(逃 05/11 10:15