作用:實現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,...