2013-05-21 75 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++中的文件。

相關問題