- 4
- 0
- 约5.68千字
- 约 6页
- 2018-10-28 发布于贵州
- 举报
函数调用约定与函数名称修饰规则
函数调用约定与函数名称修饰规则
函数调用方式(Calling Convention)决定了函数参数入栈的顺序,是由调用者函数还是被调用函数负责清除栈中的参数等问题,而函数名修饰规则(Decorated Name)决定了编译器使用何种名字修饰方式来区分不同的函数,如果函数之间的调用约定不匹配或者名字修饰不匹配就会产生以上的问题。使用C/C++语言开发软件的程序员经常碰到这样的问题:有时候是程序编译没有问题,但是链接的时候总是报告函数不存在(经典的LNK 2001错误),有时候是程序编译和链接都没有错误,但是只要调用库中的函数就会出现堆栈异常。这些现象通常是出现在C和C++的代码混合使用的情况下或在C++程序中使用第三方的库的情况下(不是用C++语言开发的),其实这都是函数调用约定和函数名修饰规则惹的祸。
函数调用约定(Calling Convention)
函数调用约定不仅决定了发生函数调用时函数参数的入栈顺序,还决定了是由调用者函数还是被调用函数负责清除栈中的参数,还原堆栈。函数调用约定有很多方式,除了常见的__cdecl,__fastcall和__stdcall之外,C++的编译器还支持thiscall方式,不少C/C++编译器还支持naked call方式。
1.__cdecl
编译器的命令行参数是/Gd。__cdecl方式是C/C++编译器默认的函数调用约定,所有非C++成
您可能关注的文档
最近下载
- 事故伤害 报告表.doc VIP
- 小区物业服务投标方案524页.doc VIP
- 2026年山东省中考语文古诗文理解性默写练习(含答案).docx
- T∕CECS 652-2019 结构健康监测系统运行维护与管理标准.pdf VIP
- 医院品管圈(QCC)活动成果报告书-基于QFD 润心服务改善 ICU 患者及家属就医体验.docx
- 肺结节诊治中国专家共识(2024年版).pptx VIP
- 16D303-3 常用水泵控制电路图集标准.docx VIP
- T_CSPSTC-《数字建筑全生命期健康监测规程》.pdf
- 高中生物 人教版 选修1《神经调节》第5课时《神经冲动的产生和传导》 课件.pptx VIP
- INOVANCE汇川MD880-61系列单相制动单元用户手册-中文.PDF
原创力文档

文档评论(0)