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



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

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

到目前为止,我包含C文件的方式是这样的:
extern "C"{
#include "shd"
}

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

对于shd.c可以使用gcc,对于c++文件可以使用g++。但是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++文件中包含它

相关内容

  • 没有找到相关文章

最新更新