精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《oohay (五黑)》之銘言: : 可是,難道C不是以statement為單位進行指令嗎? : 如果你要考慮第二個z是在第一個z加ㄧ之前或是加ㄧ之後做, : 那這個statement就不是程式執行的基本單位了. : 若是像數學式的寫法,寫 y = f(z) + z,有人也會抱怨右邊z搞不清楚是原z還是f(z)嗎? 不是 有個東西叫sequence point 可以參考c99 standard的Annex C side effect會發生在兩個sequence point之間, 不是statement 所以 printf("%d\n", (z++) + z); 和 int f(int x) {return x;} printf("%d\n", f(z++) + z); 這兩個算出來的結果會完全不同 這樣還不夠讓人搞混嗎 --- 另外 gcc會很好心的提醒你 warning: operation on 'z' may be undefined (雖然就這個case我覺得是well defined) (可能是spec沒翻清楚..) 總之寫出這種code不是什麼好事啦 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.187.64 ※ 編輯: zerodevil 來自: 118.169.187.64 (02/03 23:30)
zerodevil:啊 修掉推文了 抱歉orz 02/03 23:31
kesa:沒關係:"google sequence point side effect" 02/03 23:31
oohay:這才是把重點逼出來了啊! 多謝指教! 02/04 09:01
oohay:此外,這系列文我寫測試程式一直沒看過你所提的warning 02/04 09:03
oohay:哦...加了-Wall就看到了 02/04 09:05