Re: [閒聊] i++ is undefined behavior?

看板Soft_Job作者 (批踢踢世界)時間9年前 (2015/04/25 05:27), 編輯推噓1(108)
留言9則, 6人參與, 最新討論串3/6 (看更多)
觀念上,++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

04/25 07:11, , 1F
這觀念有點問題
04/25 07:11, 1F

04/25 07:12, , 2F
有很多情況都會是 undefined behaviour
04/25 07:12, 2F

04/25 07:12, , 3F
而大部份情況下寫出 undefined behaviour 就是不應該的
04/25 07:12, 3F

04/25 08:03, , 4F
知道自己在做什麼記得註解就行了
04/25 08:03, 4F

04/25 09:27, , 5F
樓上: 十個需要加注解的地方有九個不如改成直白的寫法來的
04/25 09:27, 5F

04/25 09:27, , 6F
好.
04/25 09:27, 6F

04/25 12:19, , 7F
就是有人喜歡賣弄一堆華而不實的寫法
04/25 12:19, 7F

04/25 12:58, , 8F
推樓上 XD
04/25 12:58, 8F

04/26 13:17, , 9F
(!!) 遇見 fr3ak XD
04/26 13:17, 9F
文章代碼(AID): #1LEhKelJ (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1LEhKelJ (Soft_Job)