如何混合編譯C語言和C

2021-09-26 18:34:22 字數 2742 閱讀 3470

如何混合編譯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生成的不一致,...