函数的调用规则——简单记忆

函数的调用规则

各种调用方式,总是记不住,这里做个笔记(我这里只是速记,具体见文章最下边):

microsoft的vc默认的是__cdecl方式,而windows API则是__stdcall,如果用vc开发dll给其他语言用,则应该指定__stdcall方式。调用约定可以通过工程设置:Setting...\C/C++ \Code Generation项进行选择,缺省状态为__cdecl。

__cdecl
所谓的C调用规则。按从右至左的顺序压参数入栈,由调用者把参数弹出栈。切记:对于传送参数的内存栈是由调用者来维护的。返回值在EAX中。比如printf。格式为_functionname

__stdcall
_stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中。按从右至左的顺序压参数入栈,由被调用者把参数弹出栈。切记:函数自己在退出时清空堆栈,返回值在EAX中。格式为_func@12(后者是参数的总字节数)

__fastcall
主要特点就是快,因为它是通过寄存器来传送参数的(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈)。返回仍然通过EAX。

__pascal
这种规则从左向右传递参数,通过EAX返回,堆栈由被调用者清除

__thiscall
仅仅应用于"C++"成员函数。this指针存放于CX寄存器,参数从右到左压。thiscall不是关键词,因此不能被程序员指定

 

参考:
http://my.oschina.net/alphajay/blog/6776

原文链接: https://www.cnblogs.com/findumars/p/3148928.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    函数的调用规则——简单记忆

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/92924

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午1:55
下一篇 2023年2月10日 上午1:55

相关推荐