在C語言中,static的字面意思很容易讓我們誤入歧途。其實它有三個作用。
(1)第壹個作用:隱藏。
當我們同時編譯多個文件時,所有不帶靜態前綴的全局變量和函數都具有全局可見性。要理解這句話,我舉個例子。我們要同時編譯兩個源文件,壹個是a.c,壹個是main.c
以下是a.c .的內容。
# include & ltcstdio & gt加上這句話
char a = ' A//全局變量
void消息()
{
printf(" Hello \ n ");
}
妳可能會問:為什麽在a.c中定義的全局變量A和函數msg可以在main.c中使用?如前所述,所有不帶靜態前綴的全局變量和函數都具有全局可見性,其他源文件也可以訪問。在這個例子中,a是壹個全局變量,msg是壹個函數,它們沒有static前綴,所以它們對另壹個源文件main.c是可見的
如果添加了static,它將對其他源文件隱藏。比如在a和msg的定義前加上static,main.c就看不到了。使用這個特性,您可以在不同的文件中用相同的名稱定義函數和變量,而不用擔心命名沖突。Static可以用作函數和變量的前綴。對於函數,static的作用僅限於隱藏,而對於變量,static有以下兩個作用。
(2)2)static的第二個作用是保持變量內容的持久性。存儲在靜態數據區的變量將在程序開始時被初始化,這是唯壹的初始化。* * *靜態存儲區存儲的變量有兩種:全局變量和靜態變量,但與全局變量相比,靜態可以控制變量的可見範圍。說到底,靜電還是用來隱藏的。
(3)3)static的第三個功能是默認初始化為0。其實全局變量也有這個屬性,因為全局變量也存儲在靜態數據區。在靜態數據區,內存中所有字節的默認值都是0x00,有時候可以減少程序員的工作量。
最後用壹句話概括靜態的三大功能。首先,靜態的主要功能是隱藏。其次,因為靜態變量存儲在靜態存儲區,所以它是持久的,默認值為0。
以下是main.c的內容
除了頭文件,還需要聲明函數:void msg();
int main(void)
{
外部字符a;//外部變量必須在使用前聲明
printf("%c ",a);
(void)msg();
返回0;
}