#include void main()
* 求執行結果
在64位ubuntu上的輸出結果是 :2 2 4 2 5 2
在嵌入式平台ssc323上輸出結果是 :2 2 4 2 3 2
引數壓棧順序
棧維護返回值存放
函式名稱修飾
呼叫規則
__cdecl
__stdcall
__fastcall
__pascal
__thiscall
引數壓棧順序
從右到左
從右到左
用ecx和edx傳送前兩個雙字(dword)或更小的引數,剩下的引數仍舊自右向左壓棧傳送
從左到右
從右到左
棧維護函式呼叫者
函式本身
函式本身
函式本身
函式本身
返回值存放
eaxeax
eaxeax
eaxc編譯器名稱修飾
函式名前加上乙個下劃線字首
函式名前加上乙個下劃線字首
函式名前加上乙個"@「符號,後面也是乙個」@"符號和其引數的位元組數
c++編譯器名稱修飾
規則與_stdcall呼叫約定相同,只是參數列的開始標識由上面的"@@yg"變為"@@ya"。
見表下面
規則與_stdcall呼叫約定相同,只是參數列的開始標識由上面的"@@yg"變為"@@yi"
void fatal () __attribute__ ((stdcall__));
* 在標頭檔案中可以
void fatal () __attribute__ ((__stdcall__));
函式呼叫引數壓棧前,先會對所有引數進行運算,運算順序:64位ubuntu上是從右往左,ssc323平台是從左往右,可能是由壓棧順序決定的。
對於i–,會生成臨時變數儲存運算的結果,壓棧也是使用的生成的臨時變數。
對於–i,不會生成臨時變數,經過了所有的引數運算後,最後壓棧時使用的是變數i。
1. i, //所有引數運算完後,i值為2
2. i--, //從右往左運算,生成的臨時變數值為5
3. i, //所有引數運算完後,i值為2
4. i--, //從右往左運算,生成的臨時變數值為4
5. --i, //所有引數運算完後,i值為2
6. i //所有引數運算完後,i值為2
* 所以輸出結果為:2 2 4 2 5 2
* 結果的顯示順序還是從左到右,按**需求來的,不會由於底層實現不同而發生變化。
1. i, //所有引數運算完後,i值為2
2. --i, //所有引數運算完後,i值為2
3. i--, //從左往右運算,生成的臨時變數值為4
4. i, //所有引數運算完後,i值為2
5. i--, //從左往右運算,生成的臨時變數值為3
6. i //所有引數運算完後,i值為2
* 所以輸出結果為:2 2 4 2 3 2
* 結果的顯示順序還是從左到右,按**需求來的,不會由於底層實現不同而發生變化。
C C 基礎知識總結 函式
1.隨機函式的使用 1.1 標頭檔案 include 或 include 1.2 用法 srand int seed 偽隨機,傳隨機種子 int d 1 rand 6 生成1 6隨機數 2.函式的引數傳遞 2.1 函式未被呼叫時,函式的形參不占有記憶體空間,也沒有實際的值。只有在函式被呼叫時才為形參...
C C 基礎知識
c 基礎知識 定義在class宣告內的成員函式預設是inline函式 進製 問 假設在n進製下,等式 240 12 2880 成立,n值是 a 19 b 18 c 17 d 16 e 15 f 以上都對 答 2 n 2 4 n 1 1 n 2 2 n 3 8 n 2 8 n 1 化簡後為恒等式,故n...
C C 基礎知識
乙個指標可以被多次賦值,但是引用只可以在建立的時候就必須初始化,初始化完畢後就不可改變 乙個指標有它自己的記憶體位址和棧上的大小 x86上面為4byte 但是引用與原有變數共享相同的記憶體位址,但是在棧上仍然占用一些記憶體空間。指標可以指向null,但是引用必須引用乙個有效的物件 乙個指標需要使用 ...