Re: [問題] 請問這個小程式的執行結果??
※ 引述《changyuheng (張昱珩)》之銘言:
: 算式應該是反序 parse 進 stack,
: 所以
: 1. ++a 讓 a = 2
: 2. a++ 告訴 a 在完成值的傳遞後要 +1
: ↓
: b = (2) + (2);
: a = 3
: 上面的說法可以由下列式子驗證:
: (a++) + (++a) * 2
以常見的VC++.net和GCC來說,你的說法問題很大
VC++.net我是用2008版本
GCC是x86 Linux的版本(詳細懶得察)
在a是整數型態時(int a;)
這兩個共通都是會把a++(a--)提出來最後再算
至於++a(--a)的部分
VC++.net也會先全部提出來,加完後再計算運算式
GCC的就有點複雜, 不過大致上它會從"左到右"一個一個算,看到++a就add 1
例如:
(++a)*512 + (a++)*64 + (++a)*8 + (a++)
x86 Linux的GCC 結果 2233(8進制)
VC++.net結果3333(8進制)
總之,這種未定義的東西,各家Compiler要怎麼編譯都行...
就算是GCC,不同平台的結果也不能保證相同。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 42.72.13.9
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章