C C 中extern的用法

2021-06-27 12:21:38 字數 1167 閱讀 1151

比如在乙個test.h檔案中有如下**:

#include

using namespace std;

int a = 1;

void printlog()

如果想要在另外乙個原始檔中使用這些全域性變數的話,需要首先用extern宣告一下在本檔案中使用的變數可以再其他模組中尋找到:

在main.c中這樣寫:

#include "main.h"

#include

using namespace std;

extern int a;

extern void printlog();

int main(void)

需要注意的是extern僅僅是宣告而已,不是定義,乙個變數只能夠定義一次,但是卻可以宣告多次。

此外還有extern "c"的用法,比如:

extern "c"

extern "c" 包含雙重含義,從字面上即可得到:首先,被它修飾的目標是「extern」的;其次,被它修飾的目標是「c」的。

第一種含義上面其實就是的,第二種含義就是:

被extern "c"修飾的變數和

函式是按照c語言方式編譯和連線的;

未加extern

「c」宣告時的

編譯方式

。首先看看c++中對類似c的

函式是怎樣編譯的。

作為一種

物件導向

的語言,c++支援

函式過載

,而過程式語言c則不支援。

函式被c++編譯後在符號庫中的名字與c語言的不同。例如,假設某個

函式的原型為:

void

foo( int x, int y );該函式

被c編譯器

編譯後在符號庫中的名字為_foo,而c++編譯器則會產生像_foo_int_int之類的名字(不同的編譯器可能生成的名字不同,但是都採用了相同的機制,生成的新名字稱為「mangled name」)。_foo_int_int這樣的名字包含了

函式名、函式引數數量及型別資訊,c++就是靠這種機制來實現

函式過載

的。例如,在c++中,

函式void

foo( int x, int y )與void foo( int x, float y )編譯生成的符號是不相同的,後者為_foo_int_float。

C C 中extern的用法

1 extern修飾變數的宣告。舉例來說,如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。這裡需要注意的是,被引用的變數v的鏈結屬性必須是外鏈結 external 的,也就是說a.c要引用到v,不只是取決於在a.c中宣告extern ...

c c 中extern的作用

看一下下面這個程式 include using namespace std intmain 這個程式編譯是有問題的,因為你根本沒有寫add這個函式,編譯器會給你報錯。但是再看這個 include using namespace std extern intadd int a,int b int ma...

C C 中extern關鍵字用法詳解

extern用於在多個檔案中間中,定義乙個全域性變數或者函式。可以在其他檔案中使用 extern 來得到乙個已定義的變數或函式的引用。extern用於函式宣告時,和普通的函式宣告並沒有區別。即extern int foo 和int foo 是一樣的效果的。使用extern更多的是表示該函式在其他檔案...