C語言中static關鍵字用法

2022-04-09 12:58:03 字數 1604 閱讀 8148

概述

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關鍵字,程式編譯提示區域性變數未...