天天看點

i=1,為什麼 (++i)+(++i)=6?

源碼

執行

為什麼出現這個鬼現象?

原因很簡單,c語言的法律裡面沒有定義這條規格,這個屬于c語言的未定義行為,也就是擦邊球,什麼是擦邊球呢?就是這些行為不是錯誤的行為,法律沒有明确定義的,是以就是擦邊球。

它的執行順序是這樣的

反彙編看看

我們不用關注所有的代碼,分析下面幾行關鍵的

看完這個代碼後,應該知道為啥輸出的是 6 了吧?

最後

我認為一個是編譯器執行順序的問題,反彙編無非就是搞清楚c的執行順序,而且我認為研究這個是有意義的,不過有意義不代表可以這樣寫代碼。

c本身是偏底層的東西,了解編譯的原理和過程是非常重要的。

但是了解也不能這樣瞎用,還是要遵守規則,要不然,這樣導緻的bug估計要害死很多人。

i=1,為什麼 (++i)+(++i)=6?
i=1,為什麼 (++i)+(++i)=6?

繼續閱讀