Re: [問題] 請問這個小程式的執行結果??

看板C_and_CPP (C/C++)作者 (張昱珩)時間13年前 (2012/10/03 00:18), 編輯推噓5(5019)
留言24則, 11人參與, 最新討論串2/3 (看更多)
算式應該是反序 parse 進 stack, 上面這句修正一下,應該是順序的 parse 進 stack,在 pop 出來時會造成後面先算 所以 1. ++a 讓 a = 2 2. a++ 告訴 a 在完成值的傳遞後要 +1 ↓ b = (2) + (2); a = 3 上面的說法可以由下列式子驗證: (a++) + (++a) * 2 ※ 引述《winout0112 (阿普)》之銘言: : int a=1; : int b = (a++) + (++a); : b=? : 結果 b=4 : 就我認知,當complier執行(a++)時,會把a的值先給出去,然後在此行 : 結束後,才幫a進行加一的動作不是嗎? : 所以整個算式應為 : b=1+(1+1); : 請糾正,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.224.169.212

10/03 00:22, , 1F
stack...........................
10/03 00:22, 1F

10/03 00:30, , 2F
只是應該,沒有用,不保證任何事情
10/03 00:30, 2F

10/03 00:30, , 3F
錯錯錯
10/03 00:30, 3F
請問為什麼錯?

10/03 00:31, , 4F
The order of operations of subexpressions within an e
10/03 00:31, 4F

10/03 00:31, , 5F
xpression is undefined.
10/03 00:31, 5F

10/03 00:34, , 6F
意思就是, 只保證 '+' 兩邊會算完再一起加起來, 但沒規定
10/03 00:34, 6F

10/03 00:35, , 7F
是左邊先算還是右邊先算.
10/03 00:35, 7F

10/03 00:37, , 8F
事實上, 未定義的意思是 "Anything at all can happen;
10/03 00:37, 8F

10/03 00:37, , 9F
我疑惑一件事 你們的compiler都給編唷???
10/03 00:37, 9F

10/03 00:37, , 10F
the Standard imposes no requirements". 所以 compiler
10/03 00:37, 10F

10/03 00:38, , 11F
怎麼做都是對的.
10/03 00:38, 11F

10/03 00:41, , 12F
gcc 會有 warning 說 may be undefined
10/03 00:41, 12F

10/03 00:42, , 13F
還是會照樣幫你編讓你玩弄它就是XDDD 真好
10/03 00:42, 13F
我沒有要爭論定義, 純粹回答原 po:「為什麼是 4?」

10/03 00:55, , 14F
你這是在誤導
10/03 00:55, 14F

10/03 00:56, , 15F
以下開放未定義的定義在不同定義下的定義 請定義之
10/03 00:56, 15F

10/03 00:56, , 16F
未定義就未定義, 不論哪種結果都是對的
10/03 00:56, 16F

10/03 01:01, , 17F
xDD
10/03 01:01, 17F

10/03 04:43, , 18F
你只要再補充說明什麼條件下會用這套流程就完美了。
10/03 04:43, 18F
在 compile time,成組語時已為此順序,可能因 infix to prefix 較方便故如此

10/03 09:03, , 19F
應該說你要連compiler的名稱、版本都要寫出來
10/03 09:03, 19F

10/03 09:03, , 20F
可以的話甚至連編譯參數都要寫...XD
10/03 09:03, 20F
gcc 4.6.3 STANDARD: c89/c99/c1x/gnu89/gnu99/gnu1x gcc -std=STANDARD INFILE ※ 編輯: changyuheng 來自: 42.73.134.253 (10/03 10:09)

10/03 11:52, , 21F
你有沒有試過-O0到-O3的差異XD
10/03 11:52, 21F

10/03 11:55, , 22F
未定義的東西你怎樣講都對,怎樣講也都錯
10/03 11:55, 22F

10/03 11:55, , 23F
就拆成兩行寫就好
10/03 11:55, 23F

10/03 12:00, , 24F
還是寫組語好,沒有這種無聊的困擾
10/03 12:00, 24F
文章代碼(AID): #1GQnF85B (C_and_CPP)
文章代碼(AID): #1GQnF85B (C_and_CPP)