C / C ++使用不同的编译器编译程序的不同部分

时间:2013-05-21 16:22:02

标签: c gcc netbeans c++11 g++

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

然而,g ++非常不喜欢C程序,当我用g ++编译shd时会产生数百个错误和警告,当我包含C文件时编译C ++程序时会遇到同样的问题。

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

extern "C"{
#include "shd"
}

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

1 个答案:

答案 0 :(得分:3)

您可以将gcc用于shd.c,将g++用于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 ++文件中。