C太多的缺省可見(jiàn)性

定義C函數(shù)時(shí),在缺省情況下函數(shù)的名字是全局可見(jiàn)的??梢栽诤瘮?shù)的名字前加個(gè)冗余的extern關(guān)鍵字,也可以不加,效果是一樣的。
這個(gè)函數(shù)對(duì)于鏈接到它所在的目標(biāo)文件的任何東西都是可見(jiàn)的,如果想限制對(duì)這個(gè)函數(shù)的訪問(wèn),就必須加個(gè)static關(guān)鍵字。

return_type fun() { /*在任何地方均可見(jiàn)*/ }  
extern return_type fun() { /*在任何地方均可見(jiàn)*/ }  
static return_type fun() { /*在這個(gè)文件之外不可見(jiàn)*/ }  

在C中,事實(shí)上,很多人都沒(méi)有在函數(shù)名前添加存儲(chǔ)類型說(shuō)明符的習(xí)慣,所以大多數(shù)函數(shù)都是全局可見(jiàn)的。
這種太大范圍的全局可見(jiàn)性會(huì)與C語(yǔ)言的另一個(gè)特性互相影響,那就是interposition。interposition就是用戶編寫(xiě)和庫(kù)函數(shù)同名的函數(shù)并取而代之的行為。許多C程序員完全沒(méi)有注意過(guò)這個(gè)特性。
范圍過(guò)寬的問(wèn)題常見(jiàn)于庫(kù)中:一個(gè)庫(kù)需要讓一個(gè)對(duì)象在另一個(gè)庫(kù)中可見(jiàn),唯一的方法是讓它變得全局可見(jiàn)。但這樣一來(lái),它對(duì)于鏈接到該庫(kù)的所有對(duì)象都是可見(jiàn)的了。這就是"all-or-nothing"——一個(gè)符號(hào)要么全局可見(jiàn),要么對(duì)其他文件都不可見(jiàn)。在C語(yǔ)言中,對(duì)信息可見(jiàn)性的選擇就是這么有限。
一個(gè)大型函數(shù)內(nèi)部的一群調(diào)用的內(nèi)部函數(shù),如果外文件調(diào)用不到這些內(nèi)部函數(shù),在這些函數(shù)聲明時(shí)最好加上static限定符,否則缺省情況下這些內(nèi)部函數(shù)是全局可見(jiàn)的。
軟件對(duì)象在大多數(shù)情況下應(yīng)該缺省的采用有限可見(jiàn)性,當(dāng)程序員需要讓它全局可見(jiàn)時(shí),應(yīng)該采用顯示的手段。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容