導航:首頁 > 源碼編譯 > 編譯器參數傳入順序

編譯器參數傳入順序

發布時間:2023-11-12 19:08:13

Ⅰ C語言程序的運行順序

1、這個涉及到函數的調用約定
運行結果跟編譯器有一定的關系,不同的編譯器參數的入棧的順序不同
一般的編譯器是從右到左
如fun(a,b)這個函數調用,是先計算參數b,入棧,再計算參數a,入棧
2、printf("%d
%d",
a++,++a);
//先計算++a,先自增,a的值變為2,將2入棧
再來計算a++,將a的值2入棧,再使a自增,a的值變為3
printf("
%d\n",a);
//a的值已經變為3了
3、printf(%d
%d",
++a.a++);//先計算a++,將a的值1入棧,再使a自增,a的值變為2,再來計算++a,先自增,a的值為3,將3入棧,輸出3
1
printf("
%d\n",a);
//輸出3
4、三種調用約定:
__stdcall調用約定。兩者實質上是一致的,即函數的參數自右向左通過棧傳遞,被調用的函數在返回前清理傳送參數的內存棧,但不同的是函數名的修飾部分(關於函數名的修飾部分在後面將詳細說明)。
C調用約定(即用__cdecl關鍵字說明)和__stdcall調用約定有所不同,雖然參數傳送方面是一樣的,但對於傳送參數的內存棧卻是由調用者來維護的(也正因為如此,實現可變參數的函數只能使用該調用約定),另外,在函數名修飾約定方面也有所不同。
__fastcall調用約定是「人」如其名,它的主要特點就是快,因為它是通過寄存器來傳送參數的(實際上,它用CX和EDX傳送前兩個雙字或更小的參數,剩下的參數仍舊自右向左壓棧傳送,被調用的函數在返回前清理傳送參數的內存棧),在函數名修飾約定方面,它和前兩者均不同。

閱讀全文

與編譯器參數傳入順序相關的資料

熱點內容
u盤里的cd驅動加密是什麼 瀏覽:413
遺傳演算法編碼長度 瀏覽:972
pe裝伺服器需要注意什麼 瀏覽:319
foreach計數php 瀏覽:525
php自連接 瀏覽:295
程序員被噴了怎麼辦 瀏覽:707
android消息數 瀏覽:261
為什麼在伺服器里輸不了指令 瀏覽:28
程序員那麼可愛前女友劇情介紹 瀏覽:101
centosjava環境變數配置 瀏覽:552
伺服器主板被鎖如何恢復 瀏覽:129
xpc語言編程軟體 瀏覽:820
光遇安卓怎麼解限制 瀏覽:300
元氣騎士老版源碼 瀏覽:103
助眠解壓音頻小姐姐口腔音 瀏覽:232
sql加密身份證號解碼 瀏覽:163
解壓玩法視頻 瀏覽:466
蘋果xls如何設置加密 瀏覽:208
湖北廣電dns的伺服器地址是多少 瀏覽:529
php獲取原始數據 瀏覽:250