static關鍵字在c語言中比較常用,使用恰當能夠大大提高程式的模組化特性,有利於擴充套件和維護。
變數1. 區域性變數
普通區域性變數是再熟悉不過的變數了,在任何乙個函式內部定義的變數(不加static修飾符)都屬於這個範疇。編譯器一般不對普通區域性變數進行初始化,也就是說它的值在初始時是不確定的,除非對其顯式賦值。
普通區域性變數儲存於程序棧空間,使用完畢會立即釋放。
靜態區域性變數使用static修飾符定義,即使在宣告時未賦初值,編譯器也會把它初始化為0。且靜態區域性變數儲存於程序的全域性資料區,即使函式返回,它的值也會保持不變。
變數在全域性資料區分配記憶體空間;編譯器自動對其初始化
其作用域為區域性作用域,當定義它的函式結束時,其作用域隨之結束 示例
#include void fn(void)
void fn_static(void)
int main(void)
執行結果如下:
n=10
n++=11
static n=10
n++=11
n=10
n++=11
static n=11
n++=12
可見,靜態區域性變數有利於程式的模組化了。
2. 全域性變數
全域性變數定義在函式體外部,在全域性資料區分配儲存空間,且編譯器會自動對其初始化。
普通全域性變數對整個工程可見,其他檔案可以使用extern外部宣告後直接使用。也就是說其他檔案不能再定義乙個與其相同名字的變數了(否則編譯器會認為它們是同乙個變數)。
靜態全域性變數僅對當前檔案可見,其他檔案不可訪問,其他檔案可以定義與其同名的變數,兩者互不影響。
在定義不需要與其他檔案共享的全域性變數時,加上static關鍵字能夠有效地降低程式模組之間的耦合,避免不同檔案同名變數的衝突,且不會誤使用。 函式
函式的使用方式與全域性變數類似,在函式的返回型別前加上static,就是靜態函式。其特性如下:
靜態函式只能在宣告它的檔案中可見,其他檔案不能引用該函式
不同的檔案可以使用相同名字的靜態函式,互不影響
非靜態函式可以在另乙個檔案中直接引用,甚至不必使用extern宣告
下面兩個檔案的例子說明使用static宣告的函式不能被另乙個檔案引用:
/* file1.c */
#include static void fun(void)
int main(void)
/* file2.c */
#include static void fun1(void)
編譯時 ,出現錯誤
修改檔案,不使用static修飾符,可在另一檔案中引用該函式
/* file1.c */
#include void fun(void)
/* file2.c */
int main(void)
編譯通過。
static是乙個很有用的關鍵字,用於本檔案的函式要全部使用static關鍵字宣告,這是乙個良好的編碼風格。
C語言中static關鍵字用法
概述 static關鍵字在c語言中比較常用,使用恰當能夠大大提高程式的模組化特性,有利於擴充套件和維護。在程式中使用static 變數1.區域性變數 普通區域性變數是再熟悉不過的變數了,在任何乙個函式內部定義的變數 不加static修飾符 都屬於這個範疇。編譯器一般不對普通區域性變數進行初始化,也就...
C語言中static關鍵字用法小結
c語言中定義的static關鍵字主要有兩個作用。c 對它進行了擴充套件,有三個作用。第乙個作用是修飾變數,又可分為修飾全域性變數和修飾區域性變數兩種情況。1.修飾全域性變數 全域性變數的值存放在棧上,其儲存型別為靜態儲存型別,不管有沒有在其前加static關鍵字,因此,全域性變數的作用域為從定義全域...
C語言中static關鍵字的用法
static關鍵字在c語言中主要有兩種用法 unsigned char test int main getchar unsigned char test static unsigned char i i return i 以上輸出後i的數值會遞增,如果去掉static關鍵字,程式編譯提示區域性變數未...