C/C++函数参数的入栈顺序,计算顺序和可变参数的实现

本文详细探讨了C/C++中函数参数的入栈顺序,指出通常是按照从右往左的方式进行,并解释了这与编译器的调用约定有关。同时,文章讨论了_Cdecl调用约定如何处理可变参数,以及不同调用约定如_Stdcall、_Fastcall和_thiscall的特点。最后,区分了参数入栈顺序与参数计算顺序的不同,并提醒读者C语言不支持默认参数。
摘要由CSDN通过智能技术生成

函数参数入栈顺序


#include
void foo(int x, int y, int z)
{
        printf("x = %d at [%X]\n", x, &x);
        printf("y = %d at [%X]\n", y, &y);
        printf("z = %d at [%X]\n", z, &z);
}
int main(int argc, char *argv[])
{
        foo(100, 200, 300);
        return 0;
}

运行结果是:

x = 100 at [...60]

y = 200 at [...64]

z = 300 at [...68]

这是由于,C程序栈的内存生长方式是往低地址内存生长,这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值