作者zerodevil (冰心無情)
看板C_and_CPP
標題Re: [問題] 面試遇到的一個問題
時間Sun Feb 3 23:25:00 2008
※ 引述《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