請問C 中使用extern關鍵字定義變數的意義

2022-02-06 20:05:12 字數 5541 閱讀 3692

1樓:趙世佳

它只有宣告的意思,說明這個變數在別的地方已經定義過了。一般是全域性變數才會加這個宣告,當然,他們是同乙個變數。就好比1.cpp檔案定義了乙個int a,

2.cpp檔案也定義了乙個 int a。這樣他們就有可能重複定義,如果2.cpp中加上extern那麼就知道2.cpp中的a在其他地方定義過了,和1.cpp是乙個變數

2樓:匿名使用者

沒有出現另外的獨立變數,extern只是乙個宣告而已.

3樓:匿名使用者

extern 只是用來宣告全域性變數

1.在乙個檔案中一般在開始處定義全域性變數,定義方法可以如下兩種(都一樣):

#include....

extern int a;//第一種

int a;//第二種

main()

.....

也就是在乙個檔案中宣告全域性變數,extern可以省略2.如果在乙個檔案中定義了乙個全域性變數【(extern)int 】a,要想在另乙個檔案中使用這個變數,則要在另乙個檔案前面加上全域性變數宣告,即加上:

extern int a;(extern 不可省略)這樣兩個檔案的全域性變數a就是同乙個,它的值就可以互相使用了,也可以在任意檔案中改變了

c++中定義變數的時候用extern有什麼用?

4樓:不懂多來問問

extern:這是外部關鍵字。

extern可以置於變數或者函式前,以表示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。

如:你在檔案a中定義了int i;

但你在檔案b中需要用到檔案a中的變數i,這時你在使用變數i之前就需要用extern int i來指定說明這是乙個外部變數,這時編譯器就會去其它檔案中查詢。(注意,這個外部變數要是在同乙個工程下的不同檔案下,才能使用。如果是不同工程中的檔案就不能這樣引出來)。

外部函式也是這樣來引用的,不同檔案中的函式可以使用extern 關鍵字來引出,c++中函式預設都是外部函式,同乙個工程下的不同檔案中的函式也不能重名,因為c++預設函式定義時是外部的,當然可以在定義時改為內部,這樣多個檔案中的函式就不會影響。

但extern 還有另乙個用處,那就是先使用後定義。如:你想使用變數i,但你不知道要在什麼地方定義i,這時你就可以使用extern 這個關鍵字來達到先使用變數i,再定義變數i的目的。

5樓:千鋒教育

只有宣告的意思,說明這個變數在別的地方已經定義過了。

一般是全域性變數才會加這個宣告,當然,他們是同乙個變數。就好比:

1.cpp檔案定義了乙個int a,

2.cpp檔案也定義了乙個 int a。

這樣他們就有可能重複定義,如果2.cpp中加上extern那麼就知道2.cpp中的a在其他地方定義過了,和1.cpp是乙個變數

6樓:匿名使用者

使用在別的.cpp檔案中已經定義好的全域性變數,其他的不用解釋了吧 還不會的@我吧

7樓:金色潛鳥

一般情況下,不須用extern。

extern 通常指 「外部於本定義域的」,它是全域性量,(寫在本檔案裡 或寫在 另乙個檔案裡)

程式例子:

#include

#include

int i=111; // 全域性量 imain();

這裡列印出 什麼?列印出 222

return 0;}

8樓:匿名使用者

表示全域性變數定義在其他檔案中

9樓:

在全域性範圍:

int i;這是定義,定義i,初始化為0。

int i = 1;這是定義,定義i,初始化為1。

extern int i = 1;這是定義,定義i,初始化為1。

extern int i;這是宣告,宣告有乙個變數i,它的定義可能在其它檔案中。

每個變數定義只能有一處。最好使每個變數都有且僅有一處定義。

extern int i = 1;作用和int i = 1;沒有區別,只是顯式地提醒程式設計師i可能會在其它檔案裡用到。

c++中的extern修飾符在變數的 宣告和定義方面有什麼作用

10樓:匿名使用者

extern置於變數或者 函式 前面 ,表示該函式或變數在別的檔案中定義。

還有其它一些鏈結作用。

具體可以參考:

c語言:用extern和不用extern宣告方法有什麼區別?

11樓:

在c語言中,修飾符extern用在變數或者函式的宣告前,用來說明「此變數/函式是在別處定義的,要在此處引用。

1. extern修飾變數的宣告。舉例來說,如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int

v,然後就可以引用變數v。這裡需要注意的是,被引用的變數v的鏈結屬性必須是外鏈結(external)的,也就是說a.c要引用到v,不只是取決於在a.c中宣告extern

intv,還取決於變數v本身是能夠被引用到的。這涉及到c語言的另外乙個話題--變數的作用域。能夠被其他模組以extern修飾符引用到的變數通常是全域性變數。還有很重要的一點是,extern

int v可以放在a.c中的任何地方,比如你可以在a.c中的函式fun定義的開頭處宣告extern int

v,然後就可以引用到變數v了,只不過這樣只能在函式fun作用域中引用v罷了,這還是變數作用域的問題。對於這一點來說,很多人使用的時候都心存顧慮。好像extern宣告只能用於檔案作用域似的。

2. extern修飾函式宣告。從本質上來講,變數和函式沒有區別。

函式名是指向函式二進位制塊開頭處的指標。如果檔案a.c需要引用b.

c中的函式,比如在b.c中原型是int

fun(int mu),那麼就可以在a.c中宣告extern int fun(int mu),然後就能使用fun來做任何事情。就像變數的宣告一樣,extern

int fun(int

mu)可以放在a.c中任何地方,而不一定非要放在a.c的檔案作用域的範圍中。

對其他模組中函式的引用,最常用的方法是包含這些函式宣告的標頭檔案。使用extern和包含標頭檔案來引用函式有什麼區別呢?extern的引用方式比包含標頭檔案要簡潔得多!

extern的使用方法是直接了當的,想引用哪個函式就用extern宣告哪個函式。這大概是kiss原則的一種體現吧!這樣做的乙個明顯的好處是,會加速程式的編譯(確切的說是預處理)的過程,節省時間。

在大型c程式編譯過程中,這種差異是非常明顯的。

3. 此外,extern修飾符可用於指示c或者c++函式的呼叫規範。比如在c++中呼叫c庫函式,就需要在c++程式中用extern

「c」宣告要引用的函式。這是給鏈結器用的,告訴鏈結器在鏈結的時候用c函式規範來鏈結。主要原因是c++和c程式編譯完成後在目標**中命名規則不同

12樓:匿名使用者

是這樣的

如果你想定義乙個靜態函式

要在函式返回值型別前加static

如果你想定義乙個外部函式

要在函式返回值型別前加extern(可省略)也就是說

預設為extern的

13樓:匿名使用者

用關鍵字extern說明的變數成為外部變數。

乙個變數被說明為外部變數,其含義是告訴系統不必為其按一般變數那樣分配記憶體,該變數已在這一區域性的外邊定義。

外部變數一般用於由多個檔案組成的程式中,有些變數在多個檔案中被說明,但卻是同一變數,指出某一變數為外部變數就避免了重複分配記憶體。

c++中 extern 是什麼含義?

14樓:匿名使用者

外部連線符號

通常是在定義介面的時候這樣使用的

這樣的乙個宣告寫在標頭檔案內,供其他檔案包含. 這時候extern表示函式的實現部份不在檔案內部,在連線的時候統一由聯結器處理.

編譯器通常會假定編譯時候找不到實現部份的函式為extern形式.

當然,加了extern也可以在該檔案內寫實現

15樓:官躍喜芳茵

1.這個**是別人寫的吧!

應該還有乙個附帶乙個庫檔案,這樣做的目的是為了讓他的**既能用於c語言**,也能用於c++**。

2.#ifdef

__cplusplus

//如果用c++編譯器編譯

extern

"c" //

則新增乙個右大括號

#endif //條件語句結束

16樓:危頎邊燁燁

c和c++是兩種語言,雖然名字裡面都有個c

你在c++裡去呼叫另一種語言的庫,那當然是要做特殊的處理

通過條件編譯可以把一些**隱藏掉,你把那些隱藏掉的**刪掉再看,括號還是成對的。

17樓:匿名使用者

表示是外部的, 不在這個編譯單元裡定義

對函式來說沒必要寫這個. 寫不寫這個都是extern的, 除非要指定匯出格式, 最常見的就是多種語言混合程式設計經常用到 extern "c" 。

而且也不是說你寫了extern就可以在別的什麼檔案裡用它了。 每個編譯單元都必須遵守「先宣告後使用」的原則

c語言中extern的意思是什麼??

18樓:胡說八道小鬼

extern關鍵字可以置於變數或者函式前,以標示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。這裡起到的是宣告作用範圍的用處。

extern的另外用法是當c和c++混合程式設計時假如c++呼叫的是c源文件定義的函式或變數,那麼要加extern來告訴編譯器用c方式命名函式:

文件a.cpp呼叫a.c裡面的變數i和函式callme()

1、可以通過把原函式名與引數資訊結合,產生乙個獨特的內部名字,這種技術叫做名字修飾(name mangling)。名字修飾規則沒有乙個標準,所以不同的編譯器的名字修飾規則也不一樣。

下面是一組函式,其中f()函式過載了:

f(void)和f(int)是不同的函式,除了函式名相同以外沒有任何關係。當生成obj目標檔案時,為了區分它們,c++編譯器根據引數資訊進行了名字修飾:

2、c語言中沒有名字修飾(name mangling),因為c語言不支援函式過載。但是如果c++中含有c**,在編譯時c++編譯器對c**的函式也會進行名字修飾,函式名變了以後,將導致在c執行庫中找不到對應函式,發生鏈結錯誤。

為了防止c++編譯器對c**進行名字修飾,我們將c**用extern 「c」進行鏈結指定,告訴編譯器,在生成中間檔案時,不要對這部分**進行名字修飾,而是生成符合c規則的中間符號名。

新增了extern 「c」鏈結指示後,上面的**就能夠正常執行了。

請問,主鍵就是主關鍵字嗎?

在資料庫中,常常不只是乙個表,這些表之間也不是相互獨立的。不同的表之間需要建立一種關係,才能將它們的資料相互溝通。而在這個溝通過程中,就需要表中有乙個字段作為標誌,不同的記錄對應的字段取值不能相同,也不能是空白的。通過這個欄位中不同的值可以區別各條記錄。就像我們區別不同的人,每個人都有名字,但它卻不...

學c語言程式語言先學關鍵字嗎,學程式設計先學C語言好還是易語言好?

問這個問題,估計是程式語言是幹什麼用的都不太清楚。最好先弄清楚這個問題再學吧。一般程式語言都是按照語法來學,每一類語法都有一些相應的關鍵字,只是看關鍵字沒有用,要結合語法一起理解。不需要,學習的過程中自然會知道的 不需要 學的過程自然會知道他 打 不停打。學程式設計先學c語言好還是易語言好?無所謂好...

c語言中的關鍵字分別是什麼意思,C語言中的32個關鍵字分別是什麼意思

1.資料型別關鍵字 12個 1 char 宣告字元型變數或函式 2 double 宣告雙精度變數或函式 3 enum 宣告列舉型別 4 float 宣告浮點型變數或函式 5 int 宣告整型變數或函式 6 long 宣告長整型變數或函式 7 short 宣告短整型變數或函式 8 signed 宣告有...