1樓:胡說八道小鬼
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」鏈結指示後,上面的**就能夠正常執行了。
2樓:匿名使用者
extern表示是外部函式或外部變數,比如:
1、extern void add(int x,inty);表示該函式主體不在當前模組中,在另乙個模組中(檔案)
2、extern int total;表示該變數在另乙個模組總定義過。
一般都把一些經常用到的列舉和變數之類的寫在.h標頭檔案中。這樣要引用時直接include "頭檔名"就可以了呼叫裡面所有的列舉和變數了。
在大型專案中,引用別的.c檔案中的函式則只能用extern,因為.c檔案是不能 include的。
所以想引用別的.c檔案中的函式和全域性變數、列舉等等的就只能用extern。
3樓:得言君
extern 是變數或函式的申明,告訴編譯器在其它檔案中找這個變數或函式的定義。
4樓:
說明要引用的變數是外部變數,函式是外部函式,就是非本檔案中定義的。
5樓:文件加油驛站
extern是全域性變數宣告
只要宣告全域性變數就預設 前面加extern(程式設計師可以不加,但編譯器預設加上)
若本檔案 引用別的檔案中的全域性變數 一定要加上extern 宣告一下
例如 #include "my_fun.c"
extern int b;//b是在my_fun.c中宣告了的乙個全域性變數
這個extern 是個宣告他可以在任何地方宣告 引用了乙個全域性變數 (可以試試 在main()函式執行完之後宣告 也不會出錯)
這樣在 工程的總標頭檔案中就不需要考慮 先#include 哪個檔案了
6樓:憑本事起嘚名字
extern int a;
int main()
int a = 123;
上面**是能正確執行的,a的定義就在該檔案中。
extern表示乙個函式或變數的宣告,並且標識這是乙個external鏈結。external鏈結表示該函式或變數的是非static的,並不是表示它的定義在別的模組(檔案)中......
宣告乙個函式時,extern可以省略,標準庫檔案中,函式的宣告都是不帶extern的。宣告變數時不能省略,不然就成了乙個未初始化的變數定義。
c語言中extern是什麼意思?
7樓:
當使用extern做修飾的時候,此變數就可以在其他的原始檔裡使用這個變數,當然前提是已經包含了這個變數所在的標頭檔案
c語言中extern的用法
c語言:用extern和不用extern宣告方法有什麼區別?
8樓:
在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程式編譯完成後在目標**中命名規則不同
9樓:匿名使用者
是這樣的
如果你想定義乙個靜態函式
要在函式返回值型別前加static
如果你想定義乙個外部函式
要在函式返回值型別前加extern(可省略)也就是說
預設為extern的
10樓:匿名使用者
用關鍵字extern說明的變數成為外部變數。
乙個變數被說明為外部變數,其含義是告訴系統不必為其按一般變數那樣分配記憶體,該變數已在這一區域性的外邊定義。
外部變數一般用於由多個檔案組成的程式中,有些變數在多個檔案中被說明,但卻是同一變數,指出某一變數為外部變數就避免了重複分配記憶體。
c語言中,extern 修飾函式是什麼意思?
11樓:匿名使用者
咯咯是這樣的
如果你想定義乙個靜態函式
要在函式返回值型別前加static
如果你想定義乙個外部函式
要在函式返回值型別前加extern(可省略)也就是說
預設為extern的
12樓:匿名使用者
extern是全域性變數宣告
只要宣告全域性變數就預設 前面加extern(程式設計師可以不加,但編譯器預設加上)
若本檔案 引用別的檔案中的全域性變數 一定要加上extern 宣告一下
例如 #include "my_fun.c"
extern int b;//b是在my_fun.c中宣告了的乙個全域性變數
這個extern 是個宣告他可以在任何地方宣告 引用了乙個全域性變數 (可以試試 在main()函式執行完之後宣告 也不會出錯)
這樣在 工程的總標頭檔案中就不需要考慮 先#include 哪個檔案了
13樓:匿名使用者
extern表明這個函式或者變數在別的檔案中定義的,在檔案a中才能使用這個函式或者變數
不申明extern也能呼叫函式f,我試過了!
那是因為你include了檔案b
14樓:匿名使用者
因為函式是在b裡定義的,a要用b裡的函式,要加extern作外部申明才能用~否則a不識別那個函式~
15樓:天下無敵之蛇
外部說明,可以把該程式中定以的變數用於其他程式中
16樓:匿名使用者
加上以後 外部函式可以呼叫該函式
在c語言中標頭檔案的extern是什麼意思呢?
17樓:匿名使用者
是乙個修飾符,在c語言中,修飾符extern用在變數或者函式的宣告前,用來說明「此變數/函式是在別處定義的,要在此處引用」。extern可置於變數或者函式前,以表示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數或函式時,在其它模組中尋找其定義。另外,extern也可用來進行鏈結指定。
在標頭檔案中宣告函式時,前面的extern可有可無,只要這些函式曾在某個.c檔案中實現就行了,不過一些函式沒有在所包含的標頭檔案中給出宣告,同時函式的定義位於其它檔案中,這時候使用該函式的.c檔案必須用extern標記該函式為外部函式。
例子:/* c.h */
extern int max(int a, int b);
extern int min(int a, int b);
/* a.c */
#include
/* 這裡需要明確指定output為extern函式 */extern void output();
int max(int a, int b)int min(int a, int b)void main()
/* b.c */
#include "c.h"
void output()
18樓:
用來申明變數或函式來自外部。
如:extern int x;表示當前原始檔所使用變數x來自其他原始檔
19樓:cx星宇
引用。比如在a檔案有個int c 。b檔案裡面include l a檔案。b裡面就可以寫 extern int c;來呼叫a裡面的 c變數
20樓:匿名使用者
1 extern可置於變數或者函式前,以表示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數或函式時,在其它模組中尋找其定義。另外,extern也可用來進行鏈結指定。
2 extern "c" 包含雙重含義,從字面上即可得到:首先,被它修飾的目標是「extern」的;其次,被它修飾的目標是「c」的。
c和c++對函式的處理方式不同
extern "c" 能夠使用c寫作的庫檔案的乙個手段,如果要對編譯器,提示使用c的方式來處理的話 就要使用 extern "c" 來說明
/*c語言標頭檔案:cexample.h */#ifndef c_example_h
#define c_example_h
extern int add(int x,int y);
#endif
//c++實現檔案,呼叫add:cppfile.cppextern "c"
c語言中include是什麼,C語言中include是什麼
include 是c語言的關鍵字 c語言有自己的函式庫,你要是想要用函式庫裡的函式就必須把包含這些函式的檔案包含進來,這時就需要用include關鍵字了,舉個例子 include stdio.h中包含基本輸入輸出函式祝你好運!包含指令,比如要使用printf scanf gets等函式就需要包含st...
在c語言中是什麼意思,C語言中的符號 和 是什麼意思?
柯嘉運郯皓 在c語言裡有兩種意思,一種是取地址符,這種情況是單目運算子,另一種是位運算子,表示按位與,這種情況是雙目運算子。擴充套件資料 c語言運算子介紹 c語言的運算子主要用於構成表示式,同一個符號在不同的表示式中,其作用並不一致。下面按計算的優先順序,分別說明不同作用的表示式。需要特別指出,在c...
c語言中c與s的區別,c語言中 c與 s的有什麼區別?
mxx米小夕 c語言中 c格式符表示輸出的是字元 s格式符表示輸出的是字串。c語言基本構成 1.資料型別 c的資料型別包括 整型 字元型 實型或浮點型 單精度和雙精度 列舉型別 陣列型別 結構體型別 共用體型別 指標型別和空型別。2.常量與變數 常量其值不可改變,符號常量名通常用大寫。變數是以某識別...