gpt4 book ai didi

c++ - 我可以在导出到 c 的 c++ 函数中使用 `bool` 类型或不透明指针指向类吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:18 40 4
gpt4 key购买 nike

我正在为我正在编写的库开发 API。库本身将用 c++ 编写,但 API 将使用 extern "C" 导出以获得最佳的跨语言兼容性(稍后我将使用此 API 来自 C#C++,也许是 C 和其他一些)。
显然,API 不能包含整个类或其他 c++ 特定功能(如抛出异常),但我的问题是:

  1. 我可以在导出的 API 中使用 bool 类型吗?毕竟,这是一个 POD。
  2. 我可以使用不透明的类指针吗?如果是这样,我将如何在头文件中声明它们,以便可以从 C 代码中使用头文件?

最佳答案

Bool 应该没问题,ABI 和语言设计者对这些事情很小心(例如,C++ 中的 complex<double> 和 C 中的 complex double 明确设计为兼容)。类可以通过前向声明变成不透明的指针。

#ifdef __cplusplus
class MyClass;
#else
#include <stdbool.h>
typedef struct MyClass MyClass;
extern "C" {
#endif

bool IsActivated(MyClass *p, int x);

#ifndef __cplusplus
}
#endif

请注意,如果设置了各种编译器标志或属性,我会看到 ABI 兼容性问题——例如 bool如果启用了结构打包,则在使用 GCC 4.2 的 C 和 C++ 中大小不同。

关于c++ - 我可以在导出到 c 的 c++ 函数中使用 `bool` 类型或不透明指针指向类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23686409/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com