C——static 的作用

在C語言中,它的作用有三條。

(1)第一條也是最重要的一條:隱藏。

當我們同時編譯多個文件時,所有未加static前綴的全局變量和函數都具有全局可見性。爲理解這句話,我舉例來說明。我們要同時編譯兩個源文件,一個是a.c,另一個是main.c。

下面是a.c的內容

char a = ‘A’; // global variable
void msg()
{
printf(“Hello\n”);
}

下面是main.c的內容

int main(void)
{
extern char a; // extern variable must be declared before use
printf(“%c “, a);
(void)msg();
return 0;
}

程序的運行結果是:

A Hello

爲什麼在a.c中定義的全局變量a和函數msg能在main.c中使用?前面說過,所有未加static前綴的全局變量和函數都具有全局可見性,其它的源文件也能訪問。此例中,a是全局變量,msg是函數,並且都沒有加static 前綴,因此對於另外的源文件main.c是可見的。

如果加了static,就會對其它源文件隱藏。例如在a和msg的定義前加上 static,main.c就看不到它們了。利用這一特性可以在不同的文件中定義同名函數和同名變量,而不必擔心命名衝突。Static可以用作函數和變量的前綴,對於函數來講,static的作用僅限於隱藏,而對於變量,static還有下面兩個作用。
(2)static的第二個作用是保持變量內容的持久。存儲在靜態數據區的變量會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變量存儲在靜態存儲區:全局變量和static變量,只不過和全局變量比起來,static可以控制變量的可見範圍,說到底static還是用來隱藏的。雖然這種用法不常見,但我還是舉一個例子。

#include

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章