C和C++中如何互相調用

因爲歷史上是先有C後有C++,所以C++中調用C中的函數加個extern "C" 既可.
假如C的文件爲c.c和c.h,C中有C_fun()函數
C++的文件爲cpp.cpp和cpp.h
-----------------------------------------------------------------------------
c.h的實現
#ifndef _c_h_
#define _c_h_
#ifdef __cplusplus
extern "C" {
#endif
 
void C_fun();
 
#ifdef __cplusplus
}
#endif
 
 
#endif
-----------------------------------
c.c的實現
#include "c.h"
void C_fun()
{
}
------------------------------------
在擦cpp.cpp中調用c.c中的C_test()
cpp.cpp的實現
#include "c.h"
int main()
{
    C_fun()
}
其中__cplusplus是C++編譯器的保留宏定義.就是說C++編譯器認爲這個宏已經定義了.
所以關鍵是extern "C" {}
extern "C"是告訴C++編譯器件括號裏的東東是按照C的obj文件格式編譯的,要連接的話按照C的命名規則去找.
================================
那麼C中是如何調用C++中的函數cpp_fun()呢?
因爲現有C後有C++, 所以只能從C++的代碼中考慮了.
加入C++中的函數或變量有可能被C中的文件掉用,則應該這樣寫,也是用extern "C"{}
不過是代碼中要加,頭文件也要加,因爲可能是C++中也調用
--------------------------------------
cpp.h的實現
#ifndef _c_h_
#define _c_h_
#ifdef __cplusplus
extern "C" {
#endif
 
void CPP_fun();
 
#ifdef __cplusplus
}
#endif
 
 
#endif
.-----------------------------------------------
Cpp.cpp的實現
extern "C" {   //告訴C+++編譯器,擴號裏按照C的命名規則編譯
void CPP_fun()
{
    .....
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章