簡述static關鍵字在c/c++中的作用

C語言中,關鍵字static有三個明顯的作用:
1)在函數體內,一個被聲明爲靜態的變量在這一函數被調用過程中維持其值不變(該變量存放在靜態變量區)。
2) 在模塊內(但在函數體外),一個被聲明爲靜態的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變量。注意,只有在定義了變量後才能使用。如果變量定義在使用之後,要用extern 聲明。所以,一般全局變量都會在文件的最開始處定義。
3) 在模塊內,一個被聲明爲靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地範圍內使用。


嵌入式系統中,作爲程序員,我們要懂得移植的重要性,程序可能是很多程序員共同合作同時完成,在定義變量及函數時,可能會重名,這給系統的集成開發帶來麻煩,因此保證不衝突的辦法是表示此變量或函數是本地的,使用static即可。
Linux的模塊編程中,這一條很明顯,所有的函數和全局變量都要用static關鍵字聲明,將其作用域限制在本模塊內部,與其他模塊共享的函數或者變量要EXPORT到內核中

static關鍵字有以下幾個作用:

1)設置變量的存儲域,函數體內static變量的作用範圍爲該函數體,不同於auto變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值;

2)限制變量的作用域,在模塊內的static全局變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問;

3)限制函數的作用域,在模塊內的static函數只可被這一模塊內的其它函數調用,這個函數的使用範圍被限制在聲明它的模塊內;

以下是C++對static的擴展

4)在類中的static修飾的成員變量屬於類可以共享,相當於全局變量,不屬於具體的某個實例或者對象,也就是說當某個類的實例修改了該靜態成員變量,其修改值爲該類的其它所有實例所見,還有必須在類外初始化,static成員變量訪問形式:1°可以被對象訪問 2° 可以被類訪問 3°可以被對象指針訪問

5)普通函數有this指針,指針可訪問所有成員,但在類中的static成員函數屬於整個類所擁有,這個函數不接收this指針,所以只能訪問類的static成員變量。static只能在聲明函數時加,不能再定義時候加(類中聲明,類外初始化)




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