我正在用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,如果这有任何区别的话。
答案 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 ++文件中。