概述
static關鍵字在c語言中比較常用,使用恰當能夠大大提高程式的模組化特性,有利於擴充套件和維護。
在程式中使用static
變數1. 區域性變數
普通區域性變數是再熟悉不過的變數了,在任何乙個函式內部定義的變數(不加static修飾符)都屬於這個範疇。編譯器一般不對普通區域性變數進行初始化,也就是說它的值在初始時是不確定的,除非對其顯式賦值。
普通區域性變數儲存於程序棧空間,使用完畢會立即釋放。
靜態區域性變數使用static修飾符定義,即使在宣告時未賦初值,編譯器也會把它初始化為0。且靜態區域性變數儲存於程序的全域性資料區,即使函式返回,它的值也會保持不變。
變數在全域性資料區分配記憶體空間;編譯器自動對其初始化
其作用域為區域性作用域,當定義它的函式結束時,其作用域隨之結束
程式例項:
#include void fn(void)
void fn_static(void)
int main(void)
總結:static幾乎有著和全域性變數的能力,但是它如果在函式內部定義,那麼它只能在函式內部被呼叫。
2. 全域性變數
全域性變數定義在函式體外部,在全域性資料區分配儲存空間,且編譯器會自動對其初始化。
普通全域性變數對整個工程可見,其他檔案可以使用extern外部宣告後直接使用。也就是說其他檔案不能再定義乙個與其相同名字的變數了(否則編譯器會認為它們是同乙個變數)。
靜態全域性變數僅對當前檔案可見,其他檔案不可訪問,其他檔案可以定義與其同名的變數,兩者互不影響。
在定義不需要與其他檔案共享的全域性變數時,加上static關鍵字能夠有效地降低程式模組之間的耦合,避免不同檔案同名變數的衝突,且不會誤使用。
3. 函式
函式的使用方式與全域性變數類似,在函式的返回型別前加上static,就是靜態函式。其特性如下:
/* file1.c */
#include static void fun(void)
int main(void)
/* file2.c */
#include static void fun1(void)
使用 gcc file1.c file2.c編譯時,錯誤報告如下:
/tmp/cc2vmzgr.o:在函式『main』中:
static_fun.c:(.text+0x20):對『fun1』未定義的引用
collect2: error: ld returned 1 exit status
修改檔案,不使用static修飾符,可在另一檔案中引用該函式:
/* file1.c */
#include void fun(void)
/* file2.c */
int main(void)
同樣使用 gcc file1.c file2.c編譯,編譯通過 C語言中static關鍵字用法
static關鍵字在c語言中比較常用,使用恰當能夠大大提高程式的模組化特性,有利於擴充套件和維護。變數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關鍵字,程式編譯提示區域性變數未...