在C語言中,extern的作用是什麼

時間 2022-04-07 06:00:03

1樓:寧秀芳塗辰

extern

是變數或函式的申明,告訴編譯器在其它檔案中找這個變數或函式的定義。

2樓:匿名使用者

告訴編譯器這個變數或者函式的定義不在當前的**中,等到連線時從別的地方找,如果找到了就可以正常編譯,如果找不到就編譯失敗。

3樓:撒德塔念

extern表示是外部函式或外部變數,比如:

1、extern

void

add(int

x,inty);表示該函式主體不在當前模組中,在另乙個模組中(檔案)2、extern

inttotal;表示該變數在另乙個模組總定義過。

一般都把一些經常用到的列舉和變數之類的寫在.h標頭檔案中。這樣要引用時直接include

"頭檔名"就可以了呼叫裡面所有的列舉和變數了。在大型專案中,引用別的.c檔案中的函式則只能用extern,因為.c檔案是不能

include的。所以想引用別的.c檔案中的函式和全域性變數、列舉等等的就只能用extern。

c語言中的extern是什麼,有什麼作用啊?

4樓:胡說八道小鬼

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」鏈結指示後,上面的**就能夠正常執行了。

5樓:匿名使用者

extern表示是外部函式或外部變數,比如:

1、extern void add(int x,inty);表示該函式主體不在當前模組中,在另乙個模組中(檔案)

2、extern int total;表示該變數在另乙個模組總定義過。

一般都把一些經常用到的列舉和變數之類的寫在.h標頭檔案中。這樣要引用時直接include "頭檔名"就可以了呼叫裡面所有的列舉和變數了。

在大型專案中,引用別的.c檔案中的函式則只能用extern,因為.c檔案是不能 include的。

所以想引用別的.c檔案中的函式和全域性變數、列舉等等的就只能用extern。

6樓:得言君

extern 是變數或函式的申明,告訴編譯器在其它檔案中找這個變數或函式的定義。

7樓:

說明要引用的變數是外部變數,函式是外部函式,就是非本檔案中定義的。

8樓:文件加油驛站

extern是全域性變數宣告

只要宣告全域性變數就預設 前面加extern(程式設計師可以不加,但編譯器預設加上)

若本檔案 引用別的檔案中的全域性變數 一定要加上extern 宣告一下

例如 #include "my_fun.c"

extern int b;//b是在my_fun.c中宣告了的乙個全域性變數

這個extern 是個宣告他可以在任何地方宣告 引用了乙個全域性變數 (可以試試 在main()函式執行完之後宣告 也不會出錯)

這樣在 工程的總標頭檔案中就不需要考慮 先#include 哪個檔案了

9樓:憑本事起嘚名字

extern int a;

int main()

int a = 123;

上面**是能正確執行的,a的定義就在該檔案中。

extern表示乙個函式或變數的宣告,並且標識這是乙個external鏈結。external鏈結表示該函式或變數的是非static的,並不是表示它的定義在別的模組(檔案)中......

宣告乙個函式時,extern可以省略,標準庫檔案中,函式的宣告都是不帶extern的。宣告變數時不能省略,不然就成了乙個未初始化的變數定義。

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

10樓:胡說八道小鬼

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」鏈結指示後,上面的**就能夠正常執行了。

11樓:匿名使用者

extern是全域性變數宣告

只要宣告全域性變數就預設 前面加extern(程式設計師可以不加,但編譯器預設加上)

若本檔案 引用別的檔案中的全域性變數 一定要加上extern 宣告一下例如 #include "my_fun.c"

extern int b;//b是在my_fun.c中宣告了的乙個全域性變數

這個extern 是個宣告他可以在任何地方宣告 引用了乙個全域性變數 (可以試試 在main()函式執行完之後宣告 也不會出錯)

這樣在 工程的總標頭檔案中就不需要考慮 先#include 哪個檔案了

12樓:匿名使用者

extern表示是外部函式或外部變數,比如:

1、extern void add(int x,inty);表示該函式主體不在當前模組中,在另乙個模組中(檔案)

2、extern int total;表示該變數在另乙個模組總定義過。

一般都把一些經常用到的列舉和變數之類的寫在.h標頭檔案中。這樣要引用時直接include "頭檔名"就可以了呼叫裡面所有的列舉和變數了。

在大型專案中,引用別的.c檔案中的函式則只能用extern,因為.c檔案是不能 include的。

所以想引用別的.c檔案中的函式和全域性變數、列舉等等的就只能用extern。

13樓:籍尋桃希萊

include是把整個都載入其中,包括檔案裡的所有的函式和變數。而採用extern只需要把需要的變數引用進來。這樣可以保證執行效率,及資源節約!

c語言中extern的用法

c語言中變數儲存static和extern兩個關鍵字的作用分別是什麼

14樓:匿名使用者

在c語言中,static可以用來修飾區域性變數,全域性變數以及函式。在不同的情況下static的作用不盡相同。

(1)修飾區域性變數

一般情況下,對於區域性變數是存放在棧區的,並且區域性變數的生命週期在該語句塊執行結束時便結束了。但是如果用static進行修飾的話,該變數便存放在靜態資料區,其生命週期一直持續到整個程式執行結束。但是在這裡要注意的是,雖然用static對區域性變數進行修飾過後,其生命週期以及儲存空間發生了變化,但是其作用域並沒有改變,其仍然是乙個區域性變數,作用域僅限於該語句塊。

在用static修飾區域性變數後,該變數只在初次執行時進行初始化工作,且只進行一次。

如:#include

void fun()

int main(void)

程式執行結果為: 2

說明在第二次呼叫fun()函式時,a的值為2,並且沒有進行初始化賦值,直接進行自增運算,所以得到的結果為3.

對於靜態區域性變數如果沒有進行初始化的話,對於整形變數系統會自動對其賦值為0,對於字元陣列,會自動賦值為'\0'.

(2)修飾全域性變數

對於乙個全域性變數,它既可以在本原始檔中被訪問到,也可以在同乙個工程的其它原始檔中被訪問(只需用extern進行宣告即可)。

如:有file1.c

int a=1;

file2.c

#include

extern int a;

int main(void)

printf("%d\",a);

return 0;

則執行結果為 1

但是如果在file1.c中把int a=1改為static int a=1;

那麼在file2.c是無法訪問到變數a的。原因在於用static對全域性變數進行修飾改變了其作用域的範圍,由原來的整個工程可見變為本原始檔可見。

(3)修飾函式

用static修飾函式的話,情況與修飾全域性變數大同小異,就是改變了函式的作用域。

extern關鍵字

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

在上面的例子中可以看出,在file2中如果想呼叫file1中的變數a,只須用extern進行宣告即可呼叫a,這就是extern的作用。在這裡要注意extern宣告的位置對其作用域也有關係,如果是在main函式中進行宣告的,則只能在main函式中呼叫,在其它函式中不能呼叫。其實要呼叫其它檔案中的函式和變數,只需把該檔案用#include包含進來即可,為啥要用extern?

因為用extern會加速程式的編譯過程,這樣能節省時間。

c語言extern的用法,C語言中extern的用法

你這裡有幾個問題我給你說下。1,我把你的程式直接黏貼是編譯不了的,就是有許多中文字元的符號,這個要注意,所有符號要在英文格式下輸入。2,你在main函式中並沒有呼叫num 這個函式,也就是num 函式未被執行,所以即使編譯通過也不會輸出3,而可能是0或者不確定的值。3,再就是如果num函式在另外乙個...

C語言中while空語句的作用,c語言中while的用法

我覺的這裡while key 0 的作用是讓程式停在這裡,等待key 0 滿足後繼續往下執行。如果這裡key對應外面的按鍵,並且key 0 表示按鍵被按下,則外面的while 1 迴圈是用來檢測按鍵是否被按下,當檢測到按鍵被按下,即if key 0 成立 執行while key 0 空迴圈,在這裡就...

c語言 中括號都有什麼作用,c語言中的中括號有什麼作用?

字串的型別是元素為char的陣列,因此可以直接對字串使用陣列的下標運算子 雖然語法看起來略奇葩 好像你的程式有點問題,陣列中的變數是確定值,因為記憶體中,陣列的分配是連續的,所以,buf是陣列名,變數i是迴圈體語句中的確定值i,for語句控制迴圈次數20次,即i 0時間buf 0 012345678...

C語言中的sturct用途, 在c語言中的意思

結構體。c為了更好的處理資料問題,引入了結構體的概念。具體用法你可以到網上搜下。我不廢話了。這是用來定義結構的函式 例如 struct student 在c語言中的意思 階乘指從1乘以2乘以3乘以4一直乘到所要求的數。例如所要求的數是4,則階乘式是1 2 3 4,得到的積是24,24就是4的階乘。例...

在C語言中fseek 的功能,在C語言中fseek 的功能

fseek 是重定位流 資料流 檔案 上的檔案內部位置指標。注意 檔案指標指向檔案 流。位置指標指向檔案內部的位元組位置,隨著檔案的讀取會移動,檔案指標如果不重新賦值將不會改變或指向別的檔案。如果執行成功,stream將指向以fromwhere為基準,偏移offset 指標偏移量 個位元組的位置,函...