2013-05-21 76 views
0

我正在用C++编写一个程序,它需要调用一个在开源C程序中编写的子程序。 C文件被称为shd.c. (程序中没有shd的头文件)。 C程序本身通过gcc编译器编译得很好,而C++程序在使用g ++编译时没有引用C文件就可以正常工作。C/C++用不同的编译器编译程序的不同部分

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

截至目前,我包括C文件的方式是这样的:

extern "C"{ 
#include "shd" 
} 

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

+0

像'make'这样的构建工具可以针对不同的语言调用不同的编译器。 – chrisaycock

+0

使用g ++编译C代码时会得到什么样的错误消息? – unxnut

回答

3

对于C++文件,您可以使用gcc代替shd.cg++。但是,有一个名称因为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++中的文件。

相关问题