我正在用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++文件中包含它