作者pttworld (批踢踢世界)
看板Soft_Job
標題Re: [閒聊] i++ is undefined behavior?
時間Sat Apr 25 05:27:01 2015
觀念上,++operand和operand++在同一個statement才會的。
然而仍取決於實作的compiler。
不存在那種寫法比較高明或要逼死誰?!
寫法是對programmer來說的,
對機器沒差。
※ 引述《ah7675 (阿懋)》之銘言:
: 最近因為同事在code review時表示 i++會隨編譯器實作而有不同行為
: 所以要求我不要用這種寫法,到這邊應該很多人會說:"沒錯啊,這你都不懂?"
: 關鍵在於他舉的例子是這樣的
: i=10;
: val = array[i++];
: val equals array[10] or array[11]?
: 我整個傻住了,我的理解是,答案絕對是val=array[10]
: 而隨編譯器會變化的地方是,在該expression/statement所構成的
: 數個指令中"遞增"的時機可能不同,所以如果在一個expression中存取i
: 兩次以上會造成未定義行為
: 但suffix increament operator必定是先return再遞增
: 請問我的理解才是錯的嗎?
: 那GLIBC裡的strcmp實作也是不可靠的嗎?
: https://fossies.org/dox/glibc-2.21/string_2strcmp_8c_source.html
: 還有另一個例子是說const global variable is better than Macro??
: 理由是global variable只有一份、用再多次也只是reference同一份
: 但是macro假設被使用10次就會造成code size增加10倍
: 用來舉例的型別是int
: 這也是顛覆了我一直以來的觀念,讓我相當震撼
: 我應該趕快請前輩喝飲料順便多請教他,還是趁試用期還沒過趕快離職?
: 請各位給我一些意見,感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.139.64.168
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1429910824.A.BD3.html
→ Feis: 這觀念有點問題 04/25 07:11
→ Feis: 有很多情況都會是 undefined behaviour 04/25 07:12
→ Feis: 而大部份情況下寫出 undefined behaviour 就是不應該的 04/25 07:12
→ testPtt: 知道自己在做什麼記得註解就行了 04/25 08:03
→ fr3ak: 樓上: 十個需要加注解的地方有九個不如改成直白的寫法來的 04/25 09:27
→ fr3ak: 好. 04/25 09:27
→ remmurds: 就是有人喜歡賣弄一堆華而不實的寫法 04/25 12:19
→ Bencrie: 推樓上 XD 04/25 12:58
推 suhorng: (!!) 遇見 fr3ak XD 04/26 13:17