您的位置:首页 > 其它

调用约定:_stdcall,_cdecl

2016-05-18 19:46 375 查看
1、_stdcall

[b]_stdcall是[/b]函数调用约定的一种,通常用于Win32 API中,函数调用约定主要约束了两件事:

①参数传递顺序: 参数从右向左压入堆栈

②调用堆栈由谁(调用函数或被调用函数)清理: 函数被调用者修改堆栈

③函数名:VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。

int f(void *p) ;

_f@4(在外部汇编语言里可以用这个名字引用这个函数)

2、_cdecl

_cdecl是C和C++程序的缺省调用方式。

①按从右至左的顺序压参数入栈

②传送参数的内存栈是由调用者来维护的;每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。

③VC将函数编译后会在函数名前面加上下划线前缀。

3、关键字 __stdcall、__cdecl和__fastcall可以直接加在要输出的函数前。它们对应的命令行参数分别为/Gz、/Gd和/Gr。缺省状态为/Gd,即__cdecl。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: