一代码风格
1、关键字if、while、for与其后的控制表达式的(括号之间插入一个空格分隔,但括号内的表达式
应紧贴括号。
2、双目运算符的两侧各插入一个空格分隔,单目运算符和操作数之间不加空格。
3、后缀运算符和操作数之间也不加空格,例如取结构体成员s.a、函数调用foo(arg1)、取数组成
员a[i]。
4、,号和;号之后要加空格,这是英文的书写习惯。
5、以上关于双目运算符和后缀运算符的规则并没有严格要求,有时候为了突出优先级也可以写得
更紧凑一些,例如for (i=1; i<10; i++) 、distance = sqrt(x*x + y*y)等。但是省略的空格
一定不要误导了读代码的人,例如a||b && c 很容易让人理解成错误的优先级。
6、由于UNIX系统标准的字符终端是24行80列的,接近或大于80个字符的较长语句要折行写,折
行后用空格和上面的表达式或参数对齐。
7、较长的字符串可以断成多个字符串然后分行书写。
8、有的人喜欢在变量定义语句中用Tab字符,使变量名对齐,这样看起来很美观。
二注释使用
1、整个源文件的顶部注释。说明此模块的相关信息,例如文件名、作者和版本历史等,顶头写不
缩进。
2、函数注释。说明此函数的功能、参数、返回值、错误码等,写在函数定义上侧,和此函数定义
之间不留空行,顶头写不缩进。
3、相对独立的语句组注释。对这一组语句做特别说明,写在语句组上侧,和此语句组之间不留空
行,与当前语句组的缩进一致。
4、代码行右侧的简短注释。对当前代码行做特别说明,一般为单行注释,和代码之间至少用一个
空格隔开,一个源文件中所有的右侧注释最好能上下对齐。
5、复杂的结构体定义比函数更需要注释。
6、复杂的宏定义和变量声明也需要注释。
三标识符命名
1.标识符命名要清晰明了,可以使用完整的单词和易于理解的缩写。
2.内核编码风格规定变量、函数和类型采用全小写加下划线的方式命名,常量(比如宏定义和
枚举常量)采用全大写加下划线的方式命名,比如上一节举例的函数名radix_tree_insert、
类型名struct radix_tree_root、常量名RADIX_TREE_MAP_SHIFT等。
3.全局变量和全局函数的命名一定要详细,不惜多用几个单词多写几个下划线。
4.禁止用汉语拼音做标识符,可读性极差。
四函数结构
1.实现一个函数只是为了做好一件事情,不要把函数设计成用途广泛、面面俱到的,这样的函
数肯定会超长,而且往往不可重用,维护困难。
2.函数内部的缩进层次不宜过多,一般以少于4层为宜。如果缩进层次太多就说明设计得太复杂
了,应考虑分割成更小的函数(HelperFunction)来调用。
3.函数不要写得太长,建议在24行的标准终端上不超过两屏,太长会造成阅读困难,如果一个
函数超过两屏就应该考虑分割函数了。[CodingStyle]中特别说明,如果一个函数在概念上是
简单的,只是长度很长,这倒没关系。例如函数由一个大的switch组成,其中有非常多
的case ,这是可以的,因为各case分支互不影响,整个函数的复杂度只等于其中一个case的
复杂度,这种情况很常见,例如TCP协议的状态机实现。
4.执行函数就是执行一个动作,函数名通常应包含动词,例
如get_current、radix_tree_insert。
5.比较重要的函数定义上侧必须加注释,说明此函数的功能、参数、返回值、错误码等。
6.另一种度量函数复杂度的办法是看有多少个局部变量,5到10个局部变量已经很多了,再多就
很难维护了,应该考虑分割成多个函数。