第一章:缩进
制表符是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,作者greg@kroah.com发表于OLS 2002:
http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/
----
参考资料:Documentation/zh_CN/CodingStyle