C語言中 extern C 使用

2021-06-28 15:29:08 字數 2286 閱讀 5448

作用:實現c++與c語言的互通性。

一、標準標頭檔案的結構

#ifndef __incvxworksh

#define __incvxworksh 

#ifdef __cplusplus  

/*如果採用了c++,如下**使用c編譯器;__cplusplus是cpp中的自定義巨集,那麼定義了這個巨集的話表示這是一段cpp的**,也就是說,上面的**的含義是:如果這是一段cpp的**,那麼加入extern "c"{}處理其中的**。*/

extern "c"

#endif         

#endif /* __incvxworksh */

注釋:標頭檔案中的編譯巨集「#ifndef __incvxworksh、#define __incvxworksh、#endif」 的作用是防止該標頭檔案被重複引用。

#ifdef __cplusplus

extern "c"

#endif

注釋:extern用於表示全域性範圍,對應的static表示區域性的範圍,限本檔案使用。

二、(1)c++中呼叫c語言中的變數或者函式

c語言標頭檔案中宣告如下:

#ifdef

__cplusplus

extern "c"

#endif/* end of __cplusplus */

例子:test_extern_c.h

/* file: test_extern_c.h */

#ifndef __test_extern_c_h__

#define __test_extern_c_h__

#ifdef__cplusplus

extern "c"

#endif/* end of __cplusplus */

#endif

c語言原始檔

/* test_extern_c.c */

#include "test_extern_c.h"

intthisistest(int a, int b)

c++原始檔:(呼叫c語言中函式)

/* main.cpp */

#include "test_extern_c.h"

#include

#include

class foo

};int

main(int argc, char **argv)

編譯:[cyc@cyc src]$ gcc -c test_extern_c.c

[cyc@cyc src

]$ g++ main.cpp test_extern_c.o

[cyc@cyc src]$ ./a.out 4 5

注釋:c語言中不支援extern "c"宣告,在.c檔案中包含了extern "c"時會出現編譯語法錯誤。

例子:c++引用c函式例子工程中包含的三個檔案的源**如下:

/* c語言標頭檔案:cexample.h */

#ifndef c_example_h

#define c_example_h

extern int add(int x,int y);

#endif

/* c語言實現檔案:cexample.c */

#include "cexample.h"

int add( int x, int y )

// c++實現檔案,呼叫add:cppfile.cpp

extern "c"

int main(int argc, char* argv)

(2)c語言中呼叫c++檔案中的函式,c引用c++函式例子源**如下:

注意:在c語言中不能直接引用宣告了extern "c"的該標頭檔案,應該僅將c檔案中將c++中定義的extern "c"函式宣告為extern型別。

//c++標頭檔案 cppexample.h

#ifndef cpp_example_h

#define cpp_example_h

extern "c" int add( int x, int y );

#endif

//c++實現檔案 cppexample.cpp

#include "cppexample.h"

int add( int x, int y )

/* c實現檔案 cfile.c

/* 這樣會編譯出錯:#include "cexample.h" */

extern int add( int x, int y );

int main( int argc, char* argv )

參考資料1

參考資料2

C 中使用C語言 extern c

個人理解 extern c 為什麼引入?是因為可移植性,能在c 中使用c 或在c 中使用c 我們都知道同乙個普通的函式在c 編譯器和c編譯器編譯後在符號庫的名字是不同的。我們在c 中呼叫c函式的話,如果不用extern c 的話,你呼叫這個函式的話,編譯器是以c 的方式去查詢,所以會提示未定義,必須...

C 使用extern C 簡單使用

先說一下函式過載,c 之所以會進行函式過載,是因為對函式名進行二次修飾 重新命名 在c檔案中寫好的程式,c 引入過來,卻沒法使用提示 無法連線的外部符號,那是因為c 按照c 的函式命名機制來尋找函式的實現.第一種情況 檔案為 test.h void show 進行了函式宣告檔案 test.c inc...

C語言中switch case使用

include include includeint main system pause 1.在c中,case和default只是作為乙個入口使用,default最後判定,意思是當所有case 條件均不滿足時,執行default,前提是沒有使用break 中斷 2.例如輸入b 1時,執行case1,...