【发布时间】:2018-09-18 06:52:29
【问题描述】:
我正在 Linux 中编写一个 C++ 程序,需要使用一个用 C 编写的旧库。该库使用 C 结构来将信息传入和传出函数,并且这些结构是字节对齐的(无填充)。
我的理解是,C++ 中的 struct 实际上是一个对象,而 C 中的 struct 只是一块内存,被划分为可单独寻址的部分。
如何在 C++ 中创建 C 风格的结构以传递给库? (我不能传递对象)
【问题讨论】:
-
你的理解是错误的。结构在 C 和 C++ 中基本相同。在 C 中定义的结构将在 C++ 中编译和链接
-
如果结构成员在 C 结构中有效,则它们是等价的。例如,添加虚函数会使结构不兼容。
-
我只能猜测“实际上是一个对象”对你意味着什么。不管它是什么,它都不适用于 C++。
-
一个 C++ 类(由
struct关键字或class关键字声明的)可以是很多东西,但 通常 它类似于一个 C 结构。 en.cppreference.com/w/cpp/concept/StandardLayoutType 和 en.cppreference.com/w/cpp/concept/TrivialType 可能会有所帮助。 -
这个问题很难回答,因为有很多问题需要考虑。简短且不完整的答案是,符合“标准布局”类(任何纯 C 声明都可以)要求的 C++
struct(或class)就可以了。extern "C"在这里完全是红鲱鱼,根本不相关。