首页 > 解决方案 > C++ 中 extern "C" 的调用约定是什么?

问题描述

标题确实准确地描述了我的要求。

extern "C" int foo( int bar ) { return bar; }

从我一直在测试的情况来看,它似乎不是__cdecl, __stdcall, __fastcall,而且显然不是__thiscall

什么是约定以及它是如何运作的?

谢谢。

标签: c++cwindows

解决方案


唯一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,它再次依赖于平台的默认设置,因此您(过去)最好为具有多个选项的平台明确指定调用约定。


推荐阅读