最近給一個等級考試的C語言培訓班上課,學生問起一些++的問題。讓我好生爲難。由於這些不一樣的編譯器處理方式,在不一樣的系統下表現並不一致。windows
無論你洋洋灑灑論述多麼一大篇,在事實面前就一下顯得蒼白了。雖然這樣的代碼在工程中是不提倡的,可是考試又不得不面對。ui
例1:rem
a=1;
b=++a+++a+++a;編譯器
問,執行完以後,b和a的值是多少?io
首先,上面第二個表達式,在WINDOWS下是沒法經過編譯的,會報告a+++a這樣的表達式 lvalue required as increment operand編譯
在Mac下也沒法經過編譯,報告的錯誤是: Expression is not assignablerequire
須要修改成:b=++a+(++a)+(++a);gcc
在WINDOWS下,VC6中,包括mingw32-gcc.exe(GCC)中,運算的結果是10,4。gc
可是在Mac中,運算的結果是:9,4。語言
緣由是在windows 下,老是先算++a+(++a),並且是先遞增兩次a,變成3,而後再算兩個3之和爲6,而後再算+(++a)的值,加上4,因而獲得10.
而mac 下彷佛更符合咱們對C的認知,是先執行2+3+4=9;
例2:
a=1;
b=a+++a+++a++;
執行結果也不一樣,windows下結果是3,4;
mac下是6,4;