static
用法:
主要定義全局靜態變量,局部靜態變量和靜態函數
作用:
在某些情況下能夠大大提高程序的模塊化特性,有利於擴展和維護,增強程序的健壯性.
空間分配時也與普通的變量有所不同
普通局部變量存儲於進程棧空間,使用完畢會立即釋放.
變量在全局數據區分配內存空間;編譯器自動對其初始化.
其作用域爲局部作用域,當定義它的函數結束時,其作用域隨之結束
靜態局部變量使用static修飾符定義,即使在聲明時未賦初值,編譯器也會把它初始化爲0。且靜態局部變量存儲於進程的全局數據區,即使函數返回,它的值也會保持不變。
而普通的變量初值往往是一個隨機數.
靜態局部變量的效果跟全局變量差不多,但是位於函數體內部,更有利於模塊化.
衝突
靜態全局變量僅對當前文件可見,其他文件不可訪問,其他文件可以定義與其同名的變量,兩者互不影響。
在定義不需要與其他文件共享的全局變量時,加上static關鍵字能夠有效地降低程序模塊之間的耦合,避免不同文件同名變量的衝突,且不會誤使用。
函數
定義靜態函數:在函數返回類型前加上static關鍵字,函數即被定義爲靜態函數,其特點如下:
a.靜態函數只能在本源文件中使用
b.在文件作用域中聲明的inline函數默認爲static類型
總結
用static定義的全局和局部靜態變量的區別是,全局的靜態變量的作用域和可見域都是從文件的定義開始到整個文件結束;而局部的靜態變量可見域是從文件的定義開始到整個文件結束,作用域是從該語句塊的定義開始到該語句塊結束。