轉載: C語言中static修飾符的意義
1、由static修飾的變量,其存儲類型為全局靜態區,變量在程序的整個運行過程中不會被銷毀,并且只會被初始化1次。
void func1()
{
static int var1 = 1; // 在全局靜態區分配變量var1的存儲空間
int var2 = 1; // 在棧上分配var2的存儲空間
var1 = var1+1;
var2 = var2+1;
printf("var1=%d, var2=%d", var1, var2)
}
void main()
{
func1();
func1();
func1();
}
代碼輸出:
“var1=2, var2=2”
“var1=3, var2=2”
“var1=4, var2=2”
2、通過static修飾,可以把函數的作用域限定在本源文件內,把全局變量的作用域限定在本源文件內
由于全局變量和函數的作用域是所有源文件,所有源文件引用的是同一個全局變量和函數,因此C語言不允許在2個源文件內定義相同的全局變量、函數,在代碼鏈接階段會提示鏈接錯誤。通過添加static修飾,可以讓2個源文件定義相同的全局變量和函數,但是注意這2個源文件引用的全局變量和函數是獨立的。
static int var1 = 1; // 限定全局變量var1僅在本源文件可見
static void func1() // 限定函數僅在本源文件可見
{
static int var2 =1; // var2是靜態變量,不是棧變量,只被初始化一次
}
void main()
{
func1();
}