教學部C++-C語言與C++相互使用
時間:2024-01-19 來源:華清遠見
前言
C和C++是兩種不同的編程語言,它們之間可以通過一些方式進行交互和調用。下面是一些關于C和C++之間相互調用的常見方法和注意事項。
一、C++調用C
1.1創建項目
首先我們要有2個項目,一個項目以C++程序編譯,要調用的項目是以C程序編譯的。我們將以vs2019進行演示。
C++項目如下:

C語言項目如下:(注意:C語言需要添加頭文件.h,頭文件主要提供給主程序包含)

C語言頭文件如下:

因為是C++調用C,而程序只有一個main函數,所以C項目里沒有main函數。
1.2生成靜態庫
我們需要把C項目生成為靜態庫,具體操作如下:
右鍵點擊我們的項目。

點擊后如下圖,選擇屬性:

打開屬性后,選擇常規,并將配置類型選擇為靜態庫,如下圖:

點擊應用,再點擊確定。確定后開始編譯如下圖:

根據路徑打開我們的文件,打開后如下圖:(.lib就是這個項目的靜態庫)

至此我們我靜態庫就已經生成完畢了。
1.3包含頭文件
生成完靜態庫后,我們需要把生成的.lib文件和C程序的.h文件復制到我們的C++項目里。如下圖:

1.4添加依賴庫
將靜態庫以及C頭文件添加到C++目錄后,我們需要打開我們的C++項目,并打開C++項目的項目屬性。如下圖:


打開屬性后,選擇“鏈接器->輸入”在附加依賴庫一欄中,把我們生成的C成語的.lib靜態庫添加進去。

1.5 程序
至此我們的環境搭建完成,然后我們需要使用”extern關鍵字”來修飾這個C的頭文件。
如下圖:

并將程序更改如下:

更改完成后,點擊編譯。這樣我們就能使用C++程序調用C程序的內容了。

二、C調用C++
2.1更改程序目錄
我們要把調用的程序,改成C++程序.cpp。

然后把主程序改成C程序,如下圖:

2.2更改代碼
但是此時出問題了,C語言里并沒有”extern C”這個用法, 這種用法放C程序里會出錯,所以我們把他刪掉。

然后,將我們的輸出打印從”C”改成”C++”.

因為CPP程序和C語言程序得函數名的修飾不同,所以我們要用extern來修飾C++程序里需要調用的函數。

但是此時又來問題了,.h的頭文件會在預處理進行展開,但是C語言不認識extern ”C”,所以我們可以這樣操作:

__cplusplus是一個宏定義,只要在以C++程序編譯時,才會有。如果不是以C++程序編譯,那么就不會展開extern ”c”。
然后我們就可以編譯了,生成的是C++程序的靜態庫。
2.3生成添加依賴庫

再把C++的靜態庫和.h文件,移動到C程序目錄。

在我們的.c主程序中,也需要添加依賴庫。如下圖


添加完成之后,選擇確認。
這樣我們就可以成功用C程序調用C++程序里的函數。
2.4編譯


