Re: [閒聊] i++ is undefined behavior?
※ 引述《pttworld (批踢踢世界)》之銘言:
: 觀念上,++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
: : 這也是顛覆了我一直以來的觀念,讓我相當震撼
: : 我應該趕快請前輩喝飲料順便多請教他,還是趁試用期還沒過趕快離職?
: : 請各位給我一些意見,感謝!
經過一串討論我又更震驚了......
原來glibc裡strcmp那種寫法對大多數人來說是華而不實
艱澀難懂又容易產生bug,平常真的沒人用這種寫法嗎?
本身是做embedded的,從bootloader到kernel到上層ap都有經驗(Linux)
學生時代也有Windows開發經驗(VS2008 MFC/Qt)
經常遊走在C與C++之間,最近則是因為改SublimeText plugin在學python XD
雖然不敢說是高手,但也看過一些open source的code
busybox/dhcp, xbmc, openwrt framework, Qt
++operator對於字串操作是極其常見(其他暫不提)
所以我一直以為這是很稀鬆平常而且基礎的寫法
這是第一次遇到有人告知我這種寫法不准用,老實說有點難接受
我完全理解"不要為了語法的漂亮而使用少見難懂的語法"
我自己也常這樣告誡自己,可是"難懂"的分界到底在哪裡?
同樣一句話由Google工程師或是學生說出來可以說是完完全全兩個世界
因為兩者對"難"的定義可說完全不一樣!
另外再問一個:
function pointer/function object也是怪物嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.181.142.174
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1429939856.A.D00.html
推
04/25 14:12, , 1F
04/25 14:12, 1F
→
04/25 14:13, , 2F
04/25 14:13, 2F
推
04/25 14:15, , 3F
04/25 14:15, 3F
→
04/25 14:30, , 4F
04/25 14:30, 4F
→
04/25 14:31, , 5F
04/25 14:31, 5F
推
04/25 15:08, , 6F
04/25 15:08, 6F
→
04/25 15:08, , 7F
04/25 15:08, 7F
→
04/25 15:08, , 8F
04/25 15:08, 8F
推
04/25 15:10, , 9F
04/25 15:10, 9F
→
04/25 15:10, , 10F
04/25 15:10, 10F
→
04/25 15:18, , 11F
04/25 15:18, 11F
→
04/25 15:18, , 12F
04/25 15:18, 12F
推
04/25 15:39, , 13F
04/25 15:39, 13F
→
04/25 15:39, , 14F
04/25 15:39, 14F
→
04/25 15:39, , 15F
04/25 15:39, 15F
推
04/25 15:42, , 16F
04/25 15:42, 16F
→
04/25 15:43, , 17F
04/25 15:43, 17F
→
04/25 15:44, , 18F
04/25 15:44, 18F
→
04/25 15:44, , 19F
04/25 15:44, 19F
→
04/25 15:51, , 20F
04/25 15:51, 20F
→
04/25 15:53, , 21F
04/25 15:53, 21F
→
04/25 15:54, , 22F
04/25 15:54, 22F
→
04/25 15:55, , 23F
04/25 15:55, 23F
推
04/25 16:09, , 24F
04/25 16:09, 24F
→
04/25 16:10, , 25F
04/25 16:10, 25F
→
04/25 16:11, , 26F
04/25 16:11, 26F
→
04/25 16:18, , 27F
04/25 16:18, 27F
→
04/25 16:18, , 28F
04/25 16:18, 28F
→
04/25 16:20, , 29F
04/25 16:20, 29F
→
04/25 16:25, , 30F
04/25 16:25, 30F
→
04/25 16:26, , 31F
04/25 16:26, 31F
→
04/25 16:34, , 32F
04/25 16:34, 32F
→
04/25 16:34, , 33F
04/25 16:34, 33F
→
04/25 16:34, , 34F
04/25 16:34, 34F
→
04/25 16:35, , 35F
04/25 16:35, 35F
推
04/25 16:37, , 36F
04/25 16:37, 36F
→
04/25 16:37, , 37F
04/25 16:37, 37F
推
04/25 16:38, , 38F
04/25 16:38, 38F
→
04/25 16:38, , 39F
04/25 16:38, 39F
還有 34 則推文
→
04/25 18:08, , 74F
04/25 18:08, 74F
→
04/25 18:09, , 75F
04/25 18:09, 75F
→
04/25 18:10, , 76F
04/25 18:10, 76F
→
04/25 18:11, , 77F
04/25 18:11, 77F
→
04/25 18:12, , 78F
04/25 18:12, 78F
→
04/25 18:14, , 79F
04/25 18:14, 79F
→
04/25 18:15, , 80F
04/25 18:15, 80F
→
04/25 18:15, , 81F
04/25 18:15, 81F
→
04/25 18:16, , 82F
04/25 18:16, 82F
→
04/25 18:17, , 83F
04/25 18:17, 83F
→
04/25 18:17, , 84F
04/25 18:17, 84F
→
04/25 18:19, , 85F
04/25 18:19, 85F
→
04/25 18:19, , 86F
04/25 18:19, 86F
→
04/25 18:20, , 87F
04/25 18:20, 87F
→
04/25 18:20, , 88F
04/25 18:20, 88F
→
04/25 18:21, , 89F
04/25 18:21, 89F
→
04/25 18:21, , 90F
04/25 18:21, 90F
→
04/25 18:22, , 91F
04/25 18:22, 91F
→
04/25 18:22, , 92F
04/25 18:22, 92F
→
04/25 18:23, , 93F
04/25 18:23, 93F
→
04/25 18:24, , 94F
04/25 18:24, 94F
→
04/25 18:25, , 95F
04/25 18:25, 95F
→
04/25 18:25, , 96F
04/25 18:25, 96F
→
04/25 18:25, , 97F
04/25 18:25, 97F
→
04/25 18:30, , 98F
04/25 18:30, 98F
→
04/25 18:30, , 99F
04/25 18:30, 99F
→
04/25 18:31, , 100F
04/25 18:31, 100F
→
04/25 18:32, , 101F
04/25 18:32, 101F
→
04/25 18:33, , 102F
04/25 18:33, 102F
→
04/25 18:33, , 103F
04/25 18:33, 103F
→
04/25 18:34, , 104F
04/25 18:34, 104F
→
04/25 18:36, , 105F
04/25 18:36, 105F
→
04/25 18:37, , 106F
04/25 18:37, 106F
→
04/25 18:37, , 107F
04/25 18:37, 107F
→
04/25 18:38, , 108F
04/25 18:38, 108F
推
04/25 19:22, , 109F
04/25 19:22, 109F
→
04/25 19:22, , 110F
04/25 19:22, 110F
→
04/25 19:23, , 111F
04/25 19:23, 111F
推
04/26 22:02, , 112F
04/26 22:02, 112F
→
04/26 22:03, , 113F
04/26 22:03, 113F
討論串 (同標題文章)