static全局變量與普通全局變量的區別
static全局變量和普通全局變量的存儲方式沒有不同,如果它們都已經初始化,那么存放在進程的數據段中,否則存放在bss段。這兩者的不同點在於作用域不同,當一個可執行目標文件是由多個源文件編譯而成,則普通全局變量在在各個源文件都是有效的。而static全局變量只能在它定義的源文件中使用。由於靜態全局變量的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。
static局部變量和普通局部變量的區別
static局部變量和普通局部變量的存儲方式與作用域都不同。普通局部變量只在聲明它的函數被調用時才會分配棧空間,並且只能在該函數內使用。而static局部變量存儲在數據段或bss段中(靜態存儲區),並且源文件的所有函數都可以使用它。
static函數與普通函數的區別
static函數與普通函數的作用域不同。普通函數的定義和聲明默認情況下是extern的,在源程序的所有文件中可見,但static函數只是在聲明他的文件中可見,不能被其他文件所用。所以說定義static函數有以下好處:
1)其他文件中可以定義相同名字的函數,不會發生沖突
2)靜態函數不能被其他文件所用。