C++函數參數的傳遞順序


C++編譯器默認使用的是 __cdecl 模式,參數是通過棧傳遞的,因此是從右到左的傳參順序。

int f(int a, int b, int c)
{
    return 0;
}
int main(){
    return  f(printf("a"),printf("b"),printf("c"));
}
當用函數做實參時,編譯器一般會根據參數傳遞順序,先計算出函數的返回值,然后將返回值傳遞給原來的函數。
函數的參數是通過棧傳遞的。因此參數從右往左入棧順序是:printf("c"),printf("b"),printf("a")。依次計算出結果:cba
 
參數傳遞標准
 
C,C++中
cdecl ,stdcall 自右向左 傳到堆棧
pacal,自左向右傳遞到堆棧
register 無方向,因為沒有用到堆棧
fastcall 使用寄存器的參數也沒規定方向,並且至少有三個寄存器,和兩個寄存器的兩種版本
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM