0

我正在用 C++ 编写一个程序,该程序需要调用一个用开源 C 程序编写的子例程。C 文件称为 shd.c。(程序中没有 shd 的头文件)。C 程序本身可以使用 gcc 编译器编译,而 C++ 程序在使用 g++ 编译时可以正常工作,而无需引用 C 文件。

但是,g++ 非常不喜欢 C 程序,当我使用 g++ 自己编译 shd 时会出现数百个错误和警告,并且当我包含 C 文件时编译 C++ 程序时也会遇到同样的问题。

截至目前,我包含 C 文件的方式如下所示:

extern "C"{
#include "shd"
}

无论如何,我认为我在这里唯一的选择(如果我错了,请纠正我)是使用不同的编译器分别编译 C 和 C++ 文件。有没有办法做到这一点?我还要指出我正在使用 NetBeans,如果这有什么不同的话。

4

1 回答 1

3

您可以使用gccforshd.cg++for c++ 文件。但是 C++ 函数名称有一个名称修饰,因此您不能直接从 C++ 调用(按名称)C 函数或从 C 代码调用 C++ 函数。为了能够调用它们,您应该使用 声明要调用的函数extern "C"

有这样做的经典方法:创建shd.h带有声明的 C/C++ 文件:

#ifdef __cplusplus 
 extern "C" {
#endif

extern int shd_a(int, int);
extern int shd_b(int, int);
...

#ifdef __cplusplus 
 }
#endif

并将其包含shd.c在 c++ 文件中。

于 2013-05-21T16:53:30.503 回答