C語言學習記錄17 和 操作符分析

2021-09-24 23:02:16 字數 999 閱讀 5343

++和—操作符對應兩條彙編指令。

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...