先看一个代码:
void myfun(int i, int ii)
{
cout << i << " " << ii << endl;
}
void main()
{
int b = 3;
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++) += 123;
printf("%d\t%d\n", *ptr, *++ptr);
int i = 10;
myfun(i, ++i);
}
VS2008输出:

函数的调用规范
函数的调用规范,也称为调用约定(Calling convention)。函数的调用规范决定了函数调用时,实参压栈、退栈及堆栈释放方式,以及函数名改编(Name Mangling)的方案,也即命名规范。
Windows环境下常用的调用规范有:
1)__cdecl:这是C/C++函数默认的调用规范,参数从右向左依次传递,压入堆栈,由调用函数负责堆栈
本文探讨了C/C++中的不同调用约定,如__cdecl、__stdcall、__thiscall和__fastcall,详细解释了它们的工作原理和应用场景。特别是在Windows环境下,各种调用约定如何处理参数传递和堆栈清理。通过分析华为笔试题中的例子,揭示了编译器对参数求值顺序的具体实现,强调了语言标准对此未作明确规定,提示开发者注意调用约定和参数求值顺序的影响。
订阅专栏 解锁全文
11万+

被折叠的 条评论
为什么被折叠?



