作者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/m.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