代码段:
问题1: 参数入栈顺序
问题2: add函数结束时,x,y变量被释放了吗
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int add(int x, int y)
{
return x + y;
}
int main()
{
int a = 10, b = 20;
int c = add(a,b);
system("pause");
return 0;
}
1、在主调函数和被调函数之间,要遵循一致的约定,才能保证正确传参被使用,这一约定称之为调用惯例
2、调用惯例
首先明确c程序,栈底为高地址,栈顶为低地址.
在c/c++程序中,默认的调用惯例为_cdecl,即上述被调函数add()的完整表达为:
int _cdecl add (int x, int y)
按照_cdecl调用惯例,参数入栈顺序为从右往左,而出栈顺序刚好相反,正好取参数相匹配.并且由主调函数决定栈变量的存亡.
关于函数名字修饰无须了解.
举个例子: