我正在 Linux中编写一个C程序,需要使用用C编写的旧库.库使用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); }