zoukankan      html  css  js  c++  java
  • 函数的调用规则——简单记忆

    函数的调用规则

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

    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

  • 相关阅读:
    人类登月不可或缺 大型机半个世纪发展史
    宽带上网知识(如何进行上网流程配置,路由器上网配置)
    团队项目第二阶段——第二天
    用户体验评价之QQ浏览器
    团队项目第二阶段——第一天
    第十四周学习进度总结
    《梦断代码》阅读笔记02
    第十三周学习进度总结
    第一阶段意见评论
    第十二周学习进度总结
  • 原文地址:https://www.cnblogs.com/findumars/p/3148928.html
Copyright © 2011-2022 走看看