static和extern關鍵字1 對函式的作用

2022-08-30 03:54:10 字數 804 閱讀 3722

一、extern與函式:(外部函式)

如果乙個程式中有多個原始檔(.c),編譯成功會生成對應的多個目標檔案(.obj),這些目標檔案還不能單獨執行,因為這些目標檔案之間可能會有關聯,比如a.obj可能會呼叫c.obj中定義的乙個函式。將這些相關聯的目標檔案鏈結在一起後才能生成可執行檔案。

先來理解2個概念:

1.外部函式:如果在當前檔案中定義的函式允許其他檔案訪問、呼叫,就稱為外部函式。c語言規定,不允許有同名的外部函式。

2.內部函式:如果在當前檔案中定義的函式不允許其他檔案訪問、呼叫,只能在內部使用,就稱為內部函式。c語言規定不同的原始檔可以有同名的內部函式,並且互不干擾。

二、static與函式:(內部函式)

其實有時候,我們可能想定義乙個"內部函式",也就是不想讓其他檔案訪問本檔案中定義的函式。

這個非常簡單,你只需要在定義函式的時候加個static關鍵字即可。

三、static、extern與函式的總結:

1.static

* 在定義函式時,在函式的最左邊加上static可以把該函式宣告為內部函式(又叫靜態函式),這樣該函式就只能在其定義所在的檔案中使用。如果在不同的檔案中有同名的內部函式,則互不干擾。

* static也可以用來宣告乙個內部函式

2.extern

* 在定義函式時,如果在函式的最左邊加上關鍵字extern,則表示此函式是外部函式,可供其他檔案呼叫。c語言規定,如果在定義函式時省略extern,則隱含為外部函式。

* 在乙個檔案中要呼叫其他檔案中的外部函式,則需要在當前檔案中用extern宣告該外部函式,然後就可以使用,這裡的extern也可以省略。

關鍵字extern和static

關鍵字extern和static都能修飾函式和變數 extern 修飾函式 extern可完整的宣告函式以及定義函式,但是預設省略,意思是外部外部函式,均為全域性變數 修飾變數 extern不可定義變數。切記 如果宣告和定義都採用extern修飾 如 extern int a 則程式中就不存在 a ...

extern和static關鍵字

在上一節我們把兩個程式檔案放在一起編譯鏈結,main.c用到的函式push pop和is empty由stack.c提供,其實有一點小問題,我們用 wall選項編譯main.c可以看到 gcc c main.c wall main.c in function main main.c 8 warnin...

static和extern關鍵字介紹

學習中,發現遇到static和extern 尤其是extern 還是不能較系統地理清具體作用。於是寫下此篇部落格整理一下這兩個關鍵字。static,用static修飾的變數被稱為靜態變數,存在於靜態儲存空間。static一般有兩種用法,修飾全域性變數 函式 和修飾區域性變數。修飾全域性變數時 若初始...