簡體   English   中英

Linux設備驅動程序中的靜態函數?

[英]Static functions in Linux device driver?

是否有理由將linux代碼中設備驅動程序中的大多數函數定義定義為靜態? 是否有一個原因?

我被告知這是為了確定范圍和防止命名空間污染,任何人都可以詳細解釋為什么在這種情況下使用靜態定義?

聲明為static的函數在它們定義的轉換單元之外是不可見的(轉換單元基本上是.c文件)。 如果不需要從文件外部調用函數,則應將其設置為靜態,以免污染全局名稱空間。 這使得相同名稱之間的沖突不太可能發生。 導出的符號通常使用某種子系統標記進行標識,這進一步減少了沖突的范圍。

通常,指向這些函數的指針最終會出現在結構中,因此它們實際上是從它們定義的文件外部調用的,而不是它們的函數名稱。

出於同樣的原因,您可以在任何代碼中使用static。 您應該只“發布”您的API調用,其他任何打開您濫用的內容,例如能夠從驅動程序外部調用內部函數,這幾乎肯定是災難性的。

只有讓外界看到必要的東西才是好的編程習慣。 這就是封裝的全部內容。

我同意。 這是任何C代碼中常見且明智的做法 - 而不僅僅是內核代碼! 不要認為這只適用於低級別的東西,任何超過一個.c文件的C代碼都應該考慮到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM