我正在 Linux 中编写 C++ 程序,需要使用用 C 编写的旧库。该库使用 C 结构将信息传入和传出函数,并且这些结构是字节对齐的(无填充)。
我的理解是,C++ 中的结构实际上是一个对象,而 C 中的结构只是一 block 内存,分为可单独寻址的部分。
如何在 C++ 中创建一个 C 风格的结构来传递给库? (我不能传递一个对象)
最佳答案
你在这里问两个问题,真的......
How can I create a C style struct in C++?
代替
struct foo { /* ... */ };
使用
extern "C" {
struct foo { /* ... */ };
}
这可能不会产生任何不同,即“C++ 风格结构”和“C 风格结构”通常是同一件事,只要您不添加方法、 protected 成员和位域。但是,由于函数需要“extern C”,因此将所有打算在 C 中使用的代码括在这些大括号中是合理的。
有关详细信息,请阅读:What is the effect of extern "C" in C++?和@AndrewHenle 的评论。
I ... need to use a library written in C
我正在解释 official C++ FAQ item在这里,告诉你(惊奇,惊奇)只在 extern C block 中包含库头,然后像编写 C 一样使用其中的任何内容:
extern "C" {
// Get declaration for `struct foo` and for `void f(struct foo)`
#include "my_c_lib.h"
}
int main() {
struct foo { /* initialization */ } my_foo;
f(my_foo);
}
关于c++ - 将 C++ 结构传递给需要 C 结构的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49723361/