【发布时间】:2023-03-19 19:21:01
【问题描述】:
我目前正在编写一个非常低级 C 程序与高级 C++ 程序之间的接口。它们的关联方式是通过链表:C 程序有一个链表,接口获取存储在链表中每个节点中的信息,并将其转换为 C++ 向量。该过程本身不是程序。问题是如何从 C 程序中调用该 C++ 函数。让我给你一些启示:
int importData(List *head, char * source, char * dest);
在名为import_helper.cpp 的C++ 文件中声明。我定义了声明,如上所示,然后是实现,所以编译不会抱怨。在 C 程序 import.c 中,我试图调用该函数:请记住,List 是在 import.c 中定义的结构
现在,在import.c 我有:
#if defined(_cplusplus)
extern 'C' {
#endif
typedef struct list{
struct list *next
.. other additional data goes here ...
}List;
int importData(List *head, char *source, char *dest);
#if defined(_cplusplus)
}
#endif
在import_helper.cpp 标头中我做了一个#include "import.c"。 import.c 没有 .h 文件(有人写了那个代码,我个人认为这本身就是一个错误)。
当我编译时,我得到:
error: expected unqualified-id before 'class'
error: conflicts with the new declaration with 'C' linking
error: previous declaration of 'void getPassword(char *)' with 'C++' linkage
这只是一个示例。但是,我相信import.c 是用gcc 编译的,而我的Build 文件用g++ 编译import_help.cpp。这可能是原因吗?我有其他类似方法的文件,所以我不太确定。任何想法?
谢谢
【问题讨论】:
-
这似乎过于复杂。您可以轻松地从 C++ 调用 C 代码。为什么不将 C 函数封装在一个类中?
-
因为 C 程序是为一项任务而设计的,而 C++ 代码是为另一项任务而设计的,但它们需要“交谈”
-
重点是将C链表转换成C++向量。这很容易做到。该程序是如何从 C 程序调用该 C++ 函数,将该链表传递给 C++ 程序。
-
那么,进程间通信是一种选择吗?否则,编写一个调用
C++函数的extern C函数。 -
我想说,只要使用 g++ 就可以了(除非你使用它不理解的奇怪的 C99 东西?)。或者更仔细地管理你的头文件
标签: c++ c gcc g++ dynamic-linking