本節書摘來自異步社群《linux 進階程式設計(第三版)》一書中的第1章,第1.4節,作者:楊宗德 , 呂光宏 , 劉雍著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
linux 進階程式設計(第三版)
下面為讀者列出gnu編碼規範和linux核心編碼規範示例。
1.4.1 gnu編碼規範
下面是gnu emacs中的一段代碼。
分析上面的代碼可以看出gnu具有如下編碼風格。
函數開頭的左花括号放到最左邊,避免把任何其他的左花括号、左括号或者左方括号放到最左邊。
盡力避免讓兩個不同優先級的操作符出現在相同的對齊方式中。
每個程式開頭都應該有一段簡短的說明其功能的注釋。例如gnu emacs上面的代碼中的注釋。
每個函數都加上注釋,以說明函數做了些什麼,需要哪些種類的參數,參數可能值的含義以及用途。
不要跨行聲明多個變量。在每一行中都以一個新的聲明開頭。
當在一個if語句中嵌套了另一個if-else語句時,應用花括号把if-else括起來。
要在同一個聲明中同時說明結構辨別和變量,或者結構辨別和類型定義(typedef)。
盡量避免在if的條件中進行指派。
在名字中使用下劃線以分隔單詞,盡量使用小寫;在宏或者枚舉中通常使用大寫常量。
使用一個指令行選項時,給出的變量應該在選項含義的說明之後,而不是選項字元之後。
另外,linux有很多工具來幫助程式員養成良好編碼規範。除了vim和emacs以外,還有indent工具可以幫程式員美化c/c++源代碼。下面用這條指令可将linux核心程式設計風格的程式quan.c轉變為gnu程式設計風格。
<code>[root@localhost ~]#$ indent -gnu quan.c</code>
1.4.2 linux核心編碼規範
下面是linux核心2.6.13目錄archi386kernel中的numaq.c的節選代碼,現在并不要求讀懂此代碼,而是看linux的核心程式設計風格。
分析以上代碼可以看出linux核心代碼具有如下風格。
縮進采用tab制表符。
在if或者for循環中,将開始的大括号放在一行的最後,而将結束大括号放在本段語句結束行的第一位,函數中的大括号除外。
變量命名盡量使用簡短的名字,簡寫或者單詞間采用了_隔開,比如代碼中的sys_cfg_data。
函數最好短小精悍,一個函數最好隻做一件事情,而且函數中的變量一般不超過10個,大小一般都小于80行。
一個子產品的注釋一般注明了作者、版權、注釋說明代碼的功能,而不是說明其實作原理,這也和linux的文化有關。
以上是gnu編碼風格和linux核心編碼風格,兩種風格展現着兩種不同的文化精神,有些地方相似,有些地方迥然不同,但是目的隻有一個:形成一個清晰、美觀、可維護、友善擴充的代碼。讀者可以根據個人情況選擇其中一種編碼規範來編寫自己的程式。