_stdcall 和_cdecl这两个关键字有什么作用呢? _stdcall 是Pascal的函数调用规则,参数从左到右入堆栈_cdecl 是C的函数调用规则,参数从右到左入堆栈 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 _cdecl是函数的缺省调用规则,必须有函数的调用者自己清空堆栈;_stdcall是API函数的调用规则,由函数自己清空堆栈。 CDECL 是使用 C 语言的调用规范。他的调用速度要比 PASCAL 的调用规范慢。因为在生成汇编代码后 CDECL 比 PASCAL 多一条汇编指令。CDECL 参数压栈是从左到右,PASCAL 是从右到左。所以 CDECL 可以实现可变参数。而 PASCAL 不能。STDCALL 是 CDECL 和 PASCAL 混合,他的参数压栈是从左到右,清除参数压栈用 PASCAL 方式。 CDECL 是使用 C 语言的调用规范。他的调用速度要比 PASCAL 的调用规范慢。因为在生成汇编代码后 CDECL 比 PASCAL 多一条汇编指令。CDECL 参数压栈是从左到右,PASCAL 是从右到左。所以 CDECL 可以实现可变参数。而 PASCAL 不能。STDCALL 是 CDECL 和 PASCAL 混合,他的参数压栈是从左到右,清除参数压栈用 PASCAL 方式。 平时写函数的时候怎么没有见到函数名称前加_cdecl或者_stacall,是编译器件默认的吗? 以上对_stdcall 编译指令理解有误:_stdcall 是WINDOWS API函数采用的编译方式。它的入栈方式是从右到左的,由被调用函数自行清栈,编译时,少一条清栈语句,因此,_stdcall编译的目标文件要比_cdecl小一些。其函数命名约定是如:int add(int a,int b) -> _add@8 (8指所有参数所占字节数)_cdecl 是C++编译器的默认编译方式,(to robbie:除非你想指明个别函数为不同的编译方式,其他都采用了默认值),它的入栈方式同样是从右到左的,由调用函数清栈(多一条语句哦),其函数命名约定较_stdcall复杂了一些,因为它要满足C++语法的需要,比如类成员函数,函数重灾等,编译器生成的函数名中包含了许多信息 ,如所属类,参数列表。以上为,我的见解,请大家指教 用CDC时出错了 怎样实现emule中选项属性风格的窗口 边界框问题 使用SetLayeredWindowAttributes的疑问 关于VC打包的问题,请高手们指点!!!!!! 如果用时间表示生日的话,1970年1月1日以前的时间 如何表示? 菜鸟问题,急 有没有什么方法让程序的执行等上一段时间再继续? 怎样控制动态创建的对话框的成员变量? 请问如何创建一个主窗体是一个CPropertySheet类,并有3个CPropertyPage? 请问高手,在chtmlview中如何禁止下载文件? 请教一个关于WINDOWS XP上的GINA的问题?
_stdcall是API函数的调用规则,由函数自己清空堆栈。
因为在生成汇编代码后 CDECL 比 PASCAL 多一条汇编指令。
CDECL 参数压栈是从左到右,PASCAL 是从右到左。
所以 CDECL 可以实现可变参数。而 PASCAL 不能。
STDCALL 是 CDECL 和 PASCAL 混合,他的参数压栈是从左到右,清除参数压栈用 PASCAL 方式。
因为在生成汇编代码后 CDECL 比 PASCAL 多一条汇编指令。
CDECL 参数压栈是从左到右,PASCAL 是从右到左。
所以 CDECL 可以实现可变参数。而 PASCAL 不能。
STDCALL 是 CDECL 和 PASCAL 混合,他的参数压栈是从左到右,清除参数压栈用 PASCAL 方式。
_stdcall 是WINDOWS API函数采用的编译方式。它的入栈方式是从右到左的,由被调用函数自行清栈,编译时,少一条清栈语句,因此,_stdcall编译的目标文件要比_cdecl小一些。其函数命名约定是如:int add(int a,int b) -> _add@8 (8指所有参数所占字节数)
_cdecl 是C++编译器的默认编译方式,(to robbie:除非你想指明个别函数为不同的编译方式,其他都采用了默认值),它的入栈方式同样是从右到左的,由调用函数清栈(多一条语句哦),其函数命名约定较_stdcall复杂了一些,因为它要满足C++语法的需要,比如类成员函数,函数重灾等,编译器生成的函数名中包含了许多信息 ,如所属类,参数列表。
以上为,我的见解,请大家指教