在我們閱讀核心**時,經常會看到有的函式名稱前面會帶有「_ _」的雙下劃線,而有些又沒有,這個有什麼用呢?
原來核心api函式具有這種名稱的,通常都是一些介面的底層函式,應該謹慎使用。實質上,這裡的雙下劃線就是要告訴程式設計師:謹慎呼叫,後則後果自負。舉個例子,在核心模組的初始函式時,實際的定義如下:
static int _ _init initializition_function(void)
module_init(initialization_function);
還有清除函式:
static void _ _exit cleanup_function(void)
module_exit(cleanup_function);
因為清除函式沒有返回值,所以會被宣告為void。_ _exit 修飾詞標記該**僅用於模組解除安裝(編譯器將把該函式放在特殊的elf段中),如果在編譯時被編譯進核心,而不是以模組化編譯,則這個函式將會被忽略丟掉,它只能在模組被解除安裝或者是關閉系統的時候被呼叫,其他的任務時間的呼叫都是錯誤的。
這裡面就用到了_ _init 和_ _exit有雙下劃線函式,雖然這個函式看起來的點不一般,它對核心來說是一種暗示,表明這個函式是在模組初始化的時候使用。但是當模組被解除安裝後,模組裝載器就會把這個函式給丟棄掉,將這個模組占用的系統資源釋放。
所以當我們在寫程式**或者是修改核心**時,如果希望在初始化結束後仍然使用這個函式或者是資料結構,就千萬不要加上雙下劃線,否則會帶來意想不到的嚴重後果。
Python單下劃線和雙下劃線
python 用下劃線作為變數字首和字尾指定特殊變數。不能用 from moduleimport 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開始。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下 劃線作為變數名的開始。一般來講,...
Python 單下劃線和雙下劃線解析
單下劃線 單下劃線開始的成員變數叫做保護變數,意思是只有類物件和子類物件自己能訪問到這些變數 雙下劃線 開始的是私有成員,意思是只有類物件自己能訪問,連子類物件也不能訪問到這個資料。如下列所示 以單下劃線開頭 foo 的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用 from impo...
Python中單下劃線和雙下劃線
python中存在一些特殊的方法,有些方法以雙下劃線 開頭和結尾,它們是python的魔法函式,比如 init 和 str 等等。不用要這種方式命名自己的變數或者函式。class a def init self,text self.text text def str self return self...