第一章:縮進
製表符是8個字符
避免3級以上的縮進
在switch語句中switch與case對齊
不要把多個語句放在一行裏
除了註釋、文檔和Kconfig之外,不要使用空格縮進
不要在行尾留空格
第二章:把長的行和字符串打散
每一行的長度限制是80列
第三章:大括號和空格的放置
起始大括號放在行尾,結束大括號放在行首(if、switch、for、while、do)
函數的起始大括號放置於下一行開頭
只有一個單獨語句的時候,不用加不必要的大括號
3.1:空格
(大多數)關鍵字後要加一個空格
不要在小括號裏的表達式兩側加空格
“*”的首選方式是使之靠近變量名或者函數名
在大多數二元和三元操作符兩側使用一個空格
一元操作符後不加空格
前綴、後綴自加和自減一元操作符前後不加空格
“.”和“->”結構體成員操作符前後不加空格
不要在行尾留白
第四章:命名
使用簡單的命名
全局變量需要有一個具描述性的名字
不要使用匈牙利命名法
本地變量名應該簡短
第五章:Typedef
不要使用類似“vps_t”之類的東西
第六章:函數
函數應該簡短而漂亮,並且只完成一件事情
本地變量的數量不應超過5-10個
使用空行隔開不同的函數
在函數原型中,包含函數名和它們的數據類型
第七章:集中的函數退出路徑
使用goto語句做一些通用的清理工作
第八章:註釋
註釋告訴別人你的代碼做了什麼,而不是怎麼做的
使用C89“/* ... */”風格
註釋數據
第九章:你已經把事情弄糟了
使用“scripts/Lindent”
第十章:Kconfig配置文件
Documentation/kbuild/kconfig-language.txt
第十一章:數據結構
使用引用計數
第十二章:宏,枚舉和RTL
定義常量的宏的名字及枚舉裏的標籤需要大寫
定義幾個相關的常量時,最好用枚舉
宏的名字請用大寫字母,不過形如函數的宏的名字可以用小寫字母
cpp手冊
Gcc internals手冊
第十三章:打印內核消息
保證信息簡單、明瞭、無歧義
使用dev_err(),dev_warn(),dev_info()等
使用pr_debug()和pr_info()等
第十四章:內存分配
使用p = kmalloc(sizeof(*p), ...);
強制轉換一個void指針的返回值是多餘的
第十五章:內聯弊病
如果一個函數有3行以上,就不要把它變成內聯函數
第十六章:函數返回值及命名
如果函數的名字是一個動作或者強制性的命令,那麼這個函數應該返回錯誤代碼整數。
如果是一個判斷,那麼函數應該返回一個“成功”布爾值。
返回值是實際計算結果而不是計算是否成功的標誌的函數不受此慣例的限制
第十七章:不要重新發明內核宏
使用頭文件include/linux/kernel.h
第十八章:編輯器模式行和其他需要羅嗦的事情
不要覆蓋別人的配置
附錄 I:參考
The C Programming Language, 第二版, 作者Brian W. Kernighan和Denni
M. Ritchie. Prentice Hall, Inc., 1988. ISBN 0-13-110362-8 (軟皮),
0-13-110370-9 (硬皮). URL: http://cm.bell-labs.com/cm/cs/cbook/
The Practice of Programming 作者Brian W. Kernighan和Rob Pike. Addison-Wesley,
Inc., 1999. ISBN 0-201-61586-X. URL: http://cm.bell-labs.com/cm/cs/tpop/
cpp,gcc,gcc internals和indent的GNU手冊——和K&R及本文相符合的部分,全部可以在
http://www.gnu.org/manual/找到
WG14是C語言的國際標準化工作組,URL: http://www.open-std.org/JTC1/SC22/WG14/
Kernel CodingStyle,作者[email protected]發表於OLS 2002:
http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/
----
參考資料:Documentation/zh_CN/CodingStyle