c++ - C++ 中 extern "C" 的调用约定是什么?
问题描述
标题确实准确地描述了我的要求。
extern "C" int foo( int bar ) { return bar; }
从我一直在测试的情况来看,它似乎不是__cdecl
, __stdcall
, __fastcall
,而且显然不是__thiscall
。
什么是约定以及它是如何运作的?
谢谢。
解决方案
唯一extern "C"
决定的是名称修饰。其他一切都取决于平台。
我只能假设您正在 x86-64 / win64 目标上进行测试?
如果是这样,那么所有这些调用约定都不再存在:
请参阅https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=vs-2017 for Win64。
搜索“x86-64 System V ABI”以获取其他所有内容。
忽略所有指定调用约定的尝试,并使用统一的。
对于 x86,它再次依赖于平台的默认设置,因此您(过去)最好为具有多个选项的平台明确指定调用约定。
推荐阅读
- c# - 传递阿拉伯语文本并检查在哪里给出错误或转换?
- jquery - 从元素中删除类
- c# - 为什么不注入 IServiceProvider 而不是每个单独的依赖项?
- javascript - 除非使用 try/catch,否则 console.log 中没有错误
- jquery - Select2标签创建附加参数使用
- android - Android studio 3.5 最近的文件
- python - 使用“浮点数”时,负数幂无穷大不正确
- node.js - 由firestore触发的打字稿(Visual Studio)测试未部署
- python - 重新安装 Python 后,Shebang (#!) 在脚本中不起作用
- python - 如何在 django 模型中创建一个自动递增字段,该字段不是全局递增而是根据另一列递增?