加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:20:28 所属栏目:百科 来源:网络整理
导读:我正在 Linux中编写一个C程序,需要使用用C编写的旧库.库使用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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读