看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): Linux CentOS 7 編譯器: gcc version 4.4.7 20120313 (Red Hat 4.4.7-23) 預期的正確結果(Expected Output):180 錯誤結果(Wrong Output):215 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) https://ideone.com/e.js/nn576o #include <iostream> using namespace std; int main() { int a=6, b=7; a *= a-- * --b; cout << a << endl; return 0; } 補充說明(Supplement): 使用 ideone.com 跑出來是正確的結果 180, 但是使用 CentOS 7 g++ 跑出來卻是 215 請教各位先進這是哪邊沒注意到? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.10.20.6 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1587346663.A.647.html
jerryh001: 同一行不能修改a兩次以上 會UB 04/20 09:41
m8403051: 所以這樣的寫法是不好的寫法嗎? 04/20 11:53
m8403051: 另外, g++ 有可能修改設定修正嗎? 04/20 11:53
james732: 實務上遇到有人這麼寫我會揍他 XD 04/20 12:02
m8403051: 了解了, 搜索到一些 undefined behavior 的資訊, 謝謝 04/20 12:19
mmmmei: 十三戒第八條 04/20 12:57
sarafciel: 都2020了還有人在出這種題目 魚骨題真是禍害遺千年 04/20 14:53
kobe8112: 工作這樣寫不會被幹飛嗎QQ 04/20 16:48
ucrxzero: 要看編譯器怎麼寫int乘法 04/20 19:08
loveme00835: xD 04/20 19:51
loveme00835: 想說怎麼會是 UB, 還沒看到解答 04/20 20:09
loveme00835: 語言也是會演進的, 所以答案也不會一成不變 04/20 20:11
oToToT: 在C++17下這樣還是UB嗎 04/20 20:56
sarafciel: 原PO提的編譯器是gcc4.4.7 所以應該用c++0x的標準(逃) 04/20 21:23
freef1y3: a*=和a--之間並没有sequence point隔開,所以計算順序没 04/22 12:45
freef1y3: 有規定 04/22 12:45
freef1y3: 發現下面有人回了XDD 04/23 00:14