++和—操作符對應兩條彙編指令。
1)前置:
變數自增(減)1
取變數值
2)後置
取變數值
變數自增(減)1
vs和gcc不同(灰色地帶)
結果分析:vs先加後自增。
為什麼結果不確定?
1)c語言中只規定了++和--對應指令的相對執行程式;
2)++和--對應的彙編指令不一定連續執行;
3)在混合運算中,++和--的彙編指令可能被打斷執行;
++和--參與混合運算的結果是不確定的。
筆試中的奇葩題:
編譯器究竟如何編譯?
int j = ++i+++i+++i; //該行出錯 1++ 這樣不合法
1)編譯器處理的每個符號應該盡可能多的包含字元;
2)編譯器從左向右的順序乙個乙個盡可能多的讀入字元;
3)當讀入的字元不可能和已讀入的字元組合成合法 符號為止;
注意:1)空格可以作為c語言中乙個完整符號的休止符;
2)編譯器讀入空格後立即對之前讀入的符號進行處理;(盡量使用空格)
小結:1)++和--操作符在混合運算中的行為可能不同;
2)編譯器通過貪心法處理表示式中的子表示式;
3)空格可以作為c語言中乙個完整符號的休止符;
4)編譯器讀入空格後立即對之前讀入的符號進行處理;
17 和 操作符分析
注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 4.4.5 一 操作符的本質 1 和 操作符對應兩條彙編指令 前置 先遞增,再使用數值 變數自增 減 1 取變數值 後置 先使用數值,再遞增 取變數值 變數自增 減 1 二 操作符使用分析...
C語言學習筆記 和 操作符
1 運算子用於在預處理期將巨集的引數轉換為字串 2 的轉換作用是在預處理期完成的,因此只在巨集定義中有效,即其他地方不能用 運算子 3 用法 define string x x printf s n string hello world 注意,hello world 不加引號!include def...
C 17 和 操作符分析
後置int i 0 i i i i i i 兩個表示式的值分別會是多少呢?例項分析 令人頭疼的兄弟 include int main 輸出 1 vc i 3 r 0 i 6 r 18 輸出 2 gcc i 3 r 0 i 6 r 16 分析 1 彙編 vc r i i i mov eax,dword...