linux核心編碼風格
linus torvalds
這是一篇描述linux
核心編碼風格的短小文件。編碼風格是個人化的,而且我不想將自己的意見強加在任何人身上,但是編碼風格卻和我必須要維護的東西是密切相關的。至少,你可以考慮這點的觀點。
首先,我建議列印乙份關於
gnu編碼標準
的影印件。我並不期望你讀,燒掉它吧,那只是乙個標誌性的雕塑。
不管怎麼樣,從這裡開始:
第一章:縮排
tabs是
8個位元組,因此縮排也是
8個位元組。有一些**的人試著將縮排改為
4個位元組(甚至是
2個位元組)的深度,那就象有些人試將
pi的值定義為
3一樣。
理由:縮排背後隱藏的是清晰地定義乙個控制塊的開始和結束。特別是你將一直看著你的螢幕整整20
個小時,你會發現如果有乙個大的縮排,那將會更容易,清晰的看到縮排是怎麼樣工作的。
現在有些人聲稱8
個位元組的縮排會使得**太靠右,那樣我們在
80位元組的終端螢幕上閱讀會很不輕鬆。對於這個問題的回答是,如果你需要
3個層次以上的縮排(2,
4,8chars),
你只是將自己陷入更大的困境中,你會希望縮排是固定的。
簡而言之,8
第二章:花括號位置
另乙個常常和c
風格相關的話題就是花括號的位置問題。不像縮排大小,在選擇花括號位置策略時很少有技術性的理由,但是更希望的方式是由
kernighan
和ritchie
首先提出來的,將開始花括號放在一行的結束位置,結束花括號放在一行的開始位置,因此:
if(x is true)
然而,有一種特例,即命名函式:它們將開始花括號放在下一行的開始位置,因此:
int function(int x)
世界上的**的人們已經聲稱這種不一致性總是存在的,但是理智的人都認為k&r
是正確的。而且,函式是特俗的。(你不會在
c中巢狀函式)
注意結束花括號是單獨一行的,除了在以下一些情形下:(花括號後緊跟著繼續闡述的相同語句)
dowhile(condition)
andif(x==y)else if(x>y) else
同樣,注意花括號的放置可以減少空行的數目,而不會帶來不可讀性。因此,由於新行的提供不是可再生的資源(想想只有25
行的終端螢幕),你可以在更多的空行上標上自己的注釋。
第三章:命名
c是乙個簡樸的語言,你的命名也應該如此。與
modula-2
和pascal
程式設計師不同,
c程式設計師不需要使用可愛的名字,像
thisvariableisatemporarycounter.
。乙個c
語言程式設計師將稱這個變數為
tmp,便於書寫,也不缺乏可讀性。
然而,當大小寫混合的名字使你不禁皺眉時,對於那些對全域性變數進行描述的名字來說,採用大小寫混合的方式是一種必須。把乙個全域性函式叫做foo
將會引來強烈滴攻擊的。
將乙個函式的型別編碼成乙個名字是需要費盡心思的。編譯器知道函式的型別並且進行檢查,但是那卻會讓乙個程式設計師疑惑。微軟會編寫出一些具有漏洞的程式就不足為奇了。
本地變數應該簡短到位。如果你需要一些隨意的整型迴圈計數器,那可能可以叫做i
。把它叫做
loop_counter
是沒有必要的,如果沒有誤解的可能性。類似的,
tmp可以是任意型別的變數,用於儲存乙個臨時性的變數。
如果你害怕混淆本地變數的名字,你將會有另外乙個問題,這個問題叫做函式增長荷爾蒙失調症候群。見下章。
第四章函式
函式應該短小精煉,並且只做一件事情,並且做好。它們內容長短應該在乙個螢幕或者兩個螢幕。(iso/ansi
螢幕的大小是
80*24),。
語句,你需要做根據很多不同的情形做很多很小的事情。這樣的函式可以是長的。
另外乙個量度函式的標準是區域性變數的數目。變數不應該超過5-10
個,不然你會犯錯誤。重新構思函式,然後將這個函式分解成幾個小的函式。乙個人的大腦通常容易的記住大約
7件不同的事情,更多的話,人就容易混淆起來。如果你覺得你聰明,那麼你也許可以理解兩周前你所作的事情。
第五章:注釋
注釋是好的習慣,可過度注釋也是一種危險。不要試著在注釋中去去解釋你的**是怎麼樣實現的。把**寫下來,那麼**是如何實現的更明顯,解釋已經寫下來的**是浪費時間的。
通常,你要讓你的注釋告訴人們你的**是做什麼的,而不是如何。同樣,避免把注釋放在函式函式體內。如果函式很複雜,以至於你需要將在不同的位置進行注釋,那麼你應該先返回到第四章內(筆者意思是對複雜函式進行分解,拆分為幾個小的函式)。你可以寫一些小的注釋來提醒和警告一些特別好的或者壞的**,但是避免太多這樣的注釋。相反,把注釋放在函式的前面,告訴人們這個函式是做什麼的,如果可能,可以寫上為什麼這樣做。
第六章:emacs
工具的使用
你可能已經從長期使用linux
的使用者那聽說了
gnu emacs
編輯器可以自動地編排
c原始檔。而且你也確實注意到了那點。
Linux作業系統核心編碼風格
第 1 章 縮排 tabs 製表符 是8個字元的大小。簡而言之,8個字元的縮排使程式更易讀,而且當你把功能隱藏的太深時,多層次的縮排還會對此很直觀的給出警告。要留心這種警告資訊。第 2 章 放置花括號 c程式中另乙個要主意的就是花括號的放置。與縮排尺寸不同的是,關於如何放置花括號沒有技術上的理由。但...
Linux核心管理風格
來自 核心月談 奎亮 original documentation process management style.rst translator alex shi alex.shi linux.alibaba.com 核心社群管理是乙個很獨特很有挑戰性的事情,各系統維護者擁有很大的權利,卻又無法命...
Linux核心管理風格
original documentation process management style.rst translator alex shi alex.shi linux.alibaba.com 核心社群管理是乙個很獨特很有挑戰性的事情,各系統維護者擁有很大的權利,卻又無法命令和管理社群參與者 一...