我有点困惑:我有一个 C++ API,它应该从 C 代码调用并在函数声明中使用 __cdecl
。
有一个带有函数指针的虚表是这样的:
void (__cdecl *funptr) (const MyStruct& obj);
引用是一种 C++ 结构,不是吗?怎么会有带引用的__cdecl
?
最后:__cdecl
是否等同于将所有内容包装在 extern "C"
语句中?在那种情况下引用文献呢?
我有点糊涂了..
最佳答案
这些是苹果和橘子。
__cdecl
是一个非标准关键字,用于描述一种更常见的 x86 ABI 调用约定(连同 __stdcall
),它指定了变量之间的传递/堆叠方式调用者和被调用者。它与 C 无关——一些历史悠久的 Microsoft C 编译器只是使用了这个调用约定,因此得名。许多编程语言都可以使用此调用约定,同样,C 代码也不必使用它。
extern "C"
只是意味着代码应该被 C++ 编译器编译为“像 C”,禁用 C++ 编译器内部使用的各种名称修改等。它不一定与兼容的 C 相关,但也可以在可能使用不同名称修饰的两个不同 C++ 编译器之间共享代码时使用。
两者都与引用的工作方式无关。在 C 中它们不会编译,在 C++ 中它们会编译。您发布的代码是 C++。
关于c++ - 引用如何出现在可从 C 代码调用的函数的签名中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72098438/