__cdecl __fastcall与__stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。
1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈。
2、_cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。注意:对于可变参数的成员函数,始终使用__cdecl的转换方式。
3、__fastcall调用约定:它是通过寄存器来传送参数的(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈)。
4、thiscall仅仅应用于"C++"成员函数。this指针存放于CX寄存器,参数从右到左压。thiscall不是关键词,因此不能被程序员指定。
5、nakedcall采用1-4的调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。naked call不产生这样的代码。naked call不是类型修饰符,故必须和_declspec共同使用。
cdecl 是 C 语言的调用方式,函数参数从右到左求值,然后入栈,参数由调用方负责清理,传多少参数其实都无所谓的,于是就支持所谓的可变长度的参数;
stdcall 是 C++ 的调用方式,参数从右到左求值,入栈,由被调用方处理参数,所以参数个数类型都必须匹配;
pascal 是对 PASCAL 函数的调用方式,参数自左向右求值,其他类似于 stdcall;
而 fastcall 的情况忽略。

转载于:https://www.cnblogs.com/wuchanming/p/4797909.html

C/C++函数调用方式相关推荐

  1. JavaScript中七种函数调用方式及对应 this 的含义

    http://blog.sina.com.cn/s/blog_621f1e120100rj21.html this 在 JavaScript 开发中占有相当重要的地位,不过很多人对this这个东西都感 ...

  2. php回调函数如何执行顺序,PHP回调函数调用方式

    //PHP回调函数调用方式 // 类MyClass class MyClass { //静态方法 public static function myCallbackMethod() { echo &q ...

  3. C++函数调用方式(_stdcall, _pascal, _cdecl...)总结 收藏

    C++函数调用方式(_stdcall, _pascal, _cdecl...)总结 收藏 __stdcall: _stdcall 调用约定相当于16位动态库中经常使用的PASCAL调用约定.在32位的 ...

  4. 字节对齐和C/C++函数调用方式学习总结(多篇节选)

    字节对齐和C/C++函数调用方式学习总结 created: 04-06-17 last saved: author: ayixidelu 前言: <***软件编程规范>中提到:" ...

  5. 静态成员函数调用方式--收藏帖子

    原帖子地址:https://bbs.csdn.net/topics/390750229 静态成员函数调用方式  A:: s_fun();//不需要额外传递一个参数,作为this 指针:因为静态函数,属 ...

  6. _cdecl、_stdcall 、_fastcall、_thiscall 函数调用方式与区别

    几种函数调用方式 __cdecl 是C DECLaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈.被调用 ...

  7. C语言试题八十一之利用递归函数调用方式,将所输入的5个字符,相反顺序打印

    1.题目 利用递归函数调用方式,将所输入的5个字符,相反顺序打印 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科目.帮助C语言学者打好程序基础.C语言基础, ...

  8. 函数调用方式以及this指向

    函数调用方式以及this指向 普通函数:fn(); function fn(){console.log( '普通函数:'+ this);}fn();//普通函数:window 对象的方法 var ob ...

  9. 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

    题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来. # -*- coding: utf8 -*- # Author:wxq #python 2.7 #题目:利用递归函数调用方式,将所 ...

  10. c语言程序中函数调用本身叫什么,在C语言中函数调用方式有什么区别

    在使用VC进行函数定义时,通常会指定该函数调用方式,那么在C语言中函数调用方式有什么区别呢?下面小编找到了一下教程,分享给大家,希望可以帮助到大家. 通常在使用VC进行函数定义时会指定该函数调用方式, ...

最新文章

  1. 这个被称为20世纪最伟大人物的最强理科生,到底有多强,你根本不了解
  2. java中集合判空_Java中的类型安全的空集合
  3. 容器编排技术 -- Kubernetes kubectl create service 命令详解
  4. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌5.04%
  5. MATLAB关于Mesh的相关命令
  6. 【python】10行代码下载B站弹幕
  7. Android流媒体播放器介绍
  8. 5G:智能座舱的分水岭,蔚来小鹏们的翻身战
  9. APISpace 人像比对API
  10. 【英语】大学英语CET考试,听力部分2(长选项关键词,答题技巧总结)
  11. Pycharm如何将项目部署到树莓派上?
  12. ipad屏幕镜像_如何在Windows PC上镜像iPhone或iPad的屏幕
  13. 学编程很枯燥?用Python制作3个小游戏,边玩边学(含源码)
  14. 英雄联盟原版下载器+解除wegame自动下载
  15. struct 结构体的内存对齐
  16. 基于arduino uno 开发板制作的 智能书包项目
  17. shell编程实例练习
  18. 求对称点的坐标(已知对称轴函数解析式,自用)
  19. OpenGL绘制罗纳尔多三维模型-Assimp库
  20. python 字典排序法-->升序排列

热门文章

  1. Xbox One 游戏欣赏: 麦克斯-兄弟魔咒
  2. javascript获取对象高度和宽度(整理)
  3. 黑客,计算机革命的英雄!
  4. 歌词滚动效果在Win8 Store 开发中的实现
  5. Python_遍历时删除的处理说明
  6. shell中输出日期的一个函数
  7. python 把list中的所有元素串起来变为字符串
  8. CMS 系统之 iframe 结构
  9. android_dialog_2
  10. java day41【JSP 、MVC开发模式 、EL表达式 、JSTL标签 、三层架构】