当前位置 : 主页 > 编程语言 > c++ >

将C结构传递给期望C结构的库

来源:互联网 收集:自由互联 发布时间:2021-06-23
我正在 Linux中编写一个C程序,需要使用用C编写的旧库.库使用C结构将信息传入和传出函数,这些结构是字节对齐的(无填充). 我的理解是C中的结构实际上是一个对象,而C中的结构只是一个内
我正在 Linux中编写一个C程序,需要使用用C编写的旧库.库使用C结构将信息传入和传出函数,这些结构是字节对齐的(无填充).

我的理解是C中的结构实际上是一个对象,而C中的结构只是一个内存块,被分成可单独寻址的部分.

如何在C中创建C样式结构以传递给库? (我不能传递一个对象)

你在这里问两个问题,真的……

How can I create a C style struct in C++?

代替

struct foo { /* ... */ };

使用

extern "C" {
    struct foo { /* ... */ };
}

这可能不会导致任何不同,即“C样式结构”和“C样式结构”通常是相同的,只要您不添加方法,受保护的成员和位字段.但是,由于函数需要“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块中包含库头,然后像你编写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);
}
网友评论