C語言中static關鍵字用法

2021-09-25 13:55:59 字數 1559 閱讀 5302

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