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

編譯器參數傳入順序

發布時間: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傳送前兩個雙字或更小的參數,剩下的參數仍舊自右向左壓棧傳送,被調用的函數在返回前清理傳送參數的內存棧),在函數名修飾約定方面,它和前兩者均不同。

閱讀全文

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

熱點內容
解壓玩法視頻 瀏覽:463
蘋果xls如何設置加密 瀏覽:203
湖北廣電dns的伺服器地址是多少 瀏覽:527
php獲取原始數據 瀏覽:246
pic單片機如何編程 瀏覽:891
javabyte寫文件 瀏覽:321
java獲取類包名 瀏覽:890
ftp命令編碼格式 瀏覽:299
程序員那麼可愛陸離穿正裝 瀏覽:171
源碼的賬號密碼在哪個文件 瀏覽:441
如何在中國農業銀行app綁定銀行卡 瀏覽:994
shopnum1多用戶商城系統源碼 瀏覽:748
紅包廣告平台源碼 瀏覽:774
硬碟格式化時用的dos命令是 瀏覽:942
找人緩解壓力 瀏覽:940
iphone的pdf 瀏覽:353
90壓縮餅干怎麼吃 瀏覽:670
php教材下載 瀏覽:917
什麼解壓密碼最好 瀏覽:592
資料庫與伺服器如何連接 瀏覽:446