如何混合編譯c語言和c++
實際開發過程中,c++中會呼叫c與語言編寫的**,我在網路上面找到一篇寫得很好的文章
就著上面的例子,我使用c語言採用兩種方法重寫了一下。
方法一、全域性函式和變數在devvar.c檔案中實現,在extern.cpp檔案中使用extern關鍵字宣告在devvar.c檔案中定義的函式和變數。
devvar.c檔案的**如下所示:
#include
int i = 1;
void func()
extern.cpp檔案中**如下所示:
#include "stdafx.h"
#include
#include
using namespace std;
//#include "devvar.h"
//extern int i;
//extern void func();
extern "c"
int main(void)
}
所以在c++檔案中編譯c檔案需要使用extern "c"關鍵字,宣告語法如下所示
extern "c"
採用c語言實現的內容
方法二、
在devvar.**件中實現c**(即devvar.h作為c語言標頭檔案),在.cpp檔案中包含c語言標頭檔案。
devvar.h標頭檔案內容為:
#include
int i = 1;
void func()
extern.cpp檔案內容如下所示
#include "stdafx.h"
#include
#include
using namespace std;
//#include "devvar.h"
//extern int i;
//extern void func();
extern "c"
int main(void)
}
其中,包含c語言標頭檔案的方式為:
extern "c"
寫到這裡,樓主又產生了乙個疑問,上面的例子講的是c++呼叫c實現的**,那如果是c呼叫c++編寫的**呢?
樓主作了如下改動:
devvar.cpp**為:
int i = 1;
void func()
extern.c檔案**為
#include
extern int i;
extern void func();
int main(void)
}
1>extern.obj : error lnk2019: unresolved external symbol _func referenced in function _main,說明.c檔案中extern void func(),按照c編譯的規則,得到函式_func,而devvar.cpp檔案採用c++編譯方式,得到的函式為xx·!_func(具體樓主也不知道哈),這樣鏈結的時候函式自然找不到,那怎麼解決呢?
需要在devvar.cpp中,明確呼叫extern "c"關鍵字,宣告cpp檔案中有關**,需要按照c的方式來生成,修改devvar.cpp檔案如下所示:
#include
int i = 1;
extern "c" void func()
此時,除了需要使用extern "c"宣告編譯的時候採用c方式編譯外,.cpp檔案中的**可以按照c++方式編寫,例如
devvar.cpp按照下面方式寫,也是正確的。
#include "stdafx.h"
#include
using namespace std;
int i = 1;
extern "c" void func()
C語言和彙編混合程式設計
在arm 的c語言程式中,使用關鍵字 asm 下劃線是兩個 來標識一段彙編指令。彙編可以通過對c程式中的宣告的全域性變數進行地間接訪問 1 使用import偽指令宣告所要呼叫的全域性變數 2 使用ldr指令讀取全域性變數的記憶體位址,通常該全域性變數的記憶體位址存放在程式的資料緩衝池中 3 根據該資...
C與C 混合程式設計 編譯
1.工程檔案架構 drwxrwxr x 3 joshyoby joshyoby 4096 2月 25 15 03 drwxrwxr x 8 joshyoby joshyoby 4096 2月 25 14 45 rw rw r 1 joshyoby joshyoby 671 2月 25 14 58 m...
C 和 C 混合編譯簡述
一 extern c 的作用 最重點 1.extern c 的真實目的是實現類c和c 的混合程式設計。extern c 是由 提供的乙個連線交換指定符號,用於告訴 這段 是 函式。extern c 後面的函式不使用的c 的名字修飾,而是用c。這是因為c 編譯後庫中函式名會變得很長,與c生成的不一致,...