Re: [問題] 一個簡單的const問題

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間15年前 (2011/07/05 14:25), 編輯推噓5(508)
留言13則, 6人參與, 最新討論串2/4 (看更多)
※ 引述《XYX16888 (XYX)》之銘言: : MAC OS / xcode 4 compile : code : : int main(void) : { : const int var = 10; : int *vptr = &var; : *vptr = 20; : printf("%d\n", var); ^^^ compile 到這一行的時候 聰明的 compiler 發現 var 是常數 所以不需要再從記憶體中取值了 直接把 10 拿來傳進 printf 即可 這叫 constant propagation 是相當基本的最佳化技術 : 想請問*vptr 到底改到哪裡的值? : 明明不是有把var的地址assign給vptr嗎? : 結果因為var是const 變數 因此 assign *vptr為20時 到底改到哪裡的值? : 謝謝 因為你跟 compiler 說 var 是常數 所以他假設 *vptr 不管發生什麼事,var 都固定是 10 但是 compiler 並沒有義務一定要做 constant propagation 也就是即使他輸出 20 那也不是他的責任 試圖寫入常數是 undefined behavior 上述的 code 在 C++ 中甚至直接視為 compile error -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.15.163

07/05 14:28, , 1F
[讚]
07/05 14:28, 1F

07/05 14:31, , 2F
當別人已經回答undefined behavior,發問者就要好好想
07/05 14:31, 2F

07/05 14:32, , 3F
錯在哪了,如果這程式是核彈程式,你早就歸天了.
07/05 14:32, 3F

07/05 14:35, , 4F
還好啦, undefined 是要看運氣歸天 (誤)
07/05 14:35, 4F

07/05 14:37, , 5F
我只是在做測試 故意寫錯 然後了解整個過程 二樓說的太
07/05 14:37, 5F

07/05 14:37, , 6F
嚴重了吧@@
07/05 14:37, 6F

07/05 14:42, , 7F
undefined behavior是經常再折磨工程師的肝,所以真的沒
07/05 14:42, 7F

07/05 14:43, , 8F
誇大效果.
07/05 14:43, 8F

07/05 16:38, , 9F
我覺得花時間在 try undefined behavior 很沒效率,
07/05 16:38, 9F

07/05 16:38, , 10F
應有更多 topic 可以玩,知道那是 U.B. 就別再試了.
07/05 16:38, 10F

07/05 16:45, , 11F
應要搞的話,下面問題搞死不少人
07/05 16:45, 11F

07/05 16:45, , 12F

07/05 23:13, , 13F
[讚]
07/05 23:13, 13F
文章代碼(AID): #1E4gv8XD (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1E4gv8XD (C_and_CPP)