可以的。
在C語言中,函式呼叫的方式有多種,在函式呼叫中還應該注意的一個問題是求值順序。所謂求值順序是指對實參列表中各個引數是自左向右使用,還是自右向左使用。對此,各系統的規定不一定相同。
__cdecl呼叫規則就是C呼叫規則。按從右至左的順序壓引數入棧,由呼叫者把引數彈出棧。切記:對於傳送引數的記憶體棧是由呼叫者來維護的。
返回值在EAX中因此,對於象printf這樣變引數的函式必須用這種規則。編譯器在編譯的時候對這種呼叫規則的函式生成修飾名的餓時候,僅在輸出函式名前加上一個下劃線字首,格式為_functionname。
擴充套件資料
示例:
在VC6.0和C-Free 5.0下執行以下程式碼。
#include
int main(){
int i=8;
printf("%d %d %d %d\n",++i,++i,--i,--i);
return 0;
}
執行結果:
8 7 6 7
可見VC 6.0是按照從右至左的順序求值。如果按照從左至右求值,結果應為:
9 10 9 8
可以的。
在C語言中,函式呼叫的方式有多種,在函式呼叫中還應該注意的一個問題是求值順序。所謂求值順序是指對實參列表中各個引數是自左向右使用,還是自右向左使用。對此,各系統的規定不一定相同。
__cdecl呼叫規則就是C呼叫規則。按從右至左的順序壓引數入棧,由呼叫者把引數彈出棧。切記:對於傳送引數的記憶體棧是由呼叫者來維護的。
返回值在EAX中因此,對於象printf這樣變引數的函式必須用這種規則。編譯器在編譯的時候對這種呼叫規則的函式生成修飾名的餓時候,僅在輸出函式名前加上一個下劃線字首,格式為_functionname。
擴充套件資料
示例:
在VC6.0和C-Free 5.0下執行以下程式碼。
#include
int main(){
int i=8;
printf("%d %d %d %d\n",++i,++i,--i,--i);
return 0;
}
執行結果:
8 7 6 7
可見VC 6.0是按照從右至左的順序求值。如果按照從左至右求值,結果應為:
9 10 9 8