學習中,發現遇到static和extern(尤其是extern)還是不能較系統地理清具體作用。於是寫下此篇部落格整理一下這兩個關鍵字。
static,用static修飾的變數被稱為靜態變數,存在於靜態儲存空間。static一般有兩種用法,修飾全域性變數(函式)和修飾區域性變數。修飾全域性變數時(若初始化存放在.data段,未初始化存放在.bss段),限定了該全域性變數只能在本檔案中訪問,其他與普通全域性變數無明顯區別,所以static此時的作用就是限制訪問空間。修飾區域性變數的時候,限制了該變數只能在該函式中訪問,修飾區域性變數的時候值得注意的是以下情況,
void func()
int main(int argc, char *argv)
return 0;
}
執行後,會發現列印出
012
34
這是靜態區域性變數比較容易被忽略的乙個特性,靜態區域性變數是在編譯時被賦值的,並且自始至終只被初始化一次。以後每次呼叫函式,不會重新初始化,只保留上次執行完的值。未完。 關鍵字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 主要修飾變數和修飾函式 靜態變數 儲存在靜態區 全域性區 靜態區域性變數 靜態區域性變數屬於靜態儲存方式,它具有以下特點 1 靜態區域性變數在函式內定義 它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式內使用該變數。退出該函式後,儘管該變數還繼續存在,但不能...