** 以Linux内核[Coding Style]源代码的风格为基础**
====================
**空白**
1、关键字if, while, for与其后的控制表达式的(括号之间插入一个空格分隔,但括号内的表达式 应紧贴括号。
2、双目运算符的两侧插入一个空格分隔,单目运算符和操作数之间不加空格。
3、后缀运算符和操作数之间也不加空格。
4、,号和;号之后要加空格。
5、以上关于双目运算符和后缀运算符的规则不是严格要求,有时候为了突出优先级也可以写得 更紧凑一些。
6、由于标准的Linux终端是24行80列的,接近或大于80个字符的较长语句要折行写,折行后用 空格和上面的表达式或参数对齐。
7、较长的字符串可以断成多个字符串然后分行书写。C编译器会自动把相邻的多个字符串接在一起。
**缩进**
1、要用缩进体现出语句块的层次关系,使用Tab字符缩进,不能用空格代替Tab。
2、if/else、while、do/while、for、switch这些可以带语句块的语句,语句块的{和}应该和关 键字写在一起,用空格隔开,而不是单独占一行。
3、函数定义的{和}单独占一行,这一点和语句块的规定不同。
4、switch和语句块里的case、default对齐写,也就是说语句块里的case、default相对 于switch不往里缩进。
5、代码中每个逻辑段落之间应该用一个空行分隔开。
6、一个函数的语句列表如果很长,也可以根据相关性分成若干组,用空行分隔,这条规定不是 严格要求,一般变量定义语句组成一组,后面要加空行,return之前要加空行。
**注释**
单行注释应采用/* comment */的形式,用空格把界定符和文字分开。多行注释最常见的是这种 形式:
/*
* Multi-line
* comment
*/
**使用注释的场合**
1、整个源文件的顶部注释。说明此模块的相关信息,例如文件名、作者和版本历史等,顶头写 不缩进。
2、函数注释。说明此函数的功能、参数、返回值、错误码等,写在函数定义上侧,和此函数定 义之间不留空行,顶头写不缩进。
3、相对独立的语句组注释。对这一组语句做特别说明,写在语句组上侧,和此语句组之间不留 空行,与当前语句组的缩进一致。注意,说明语句组的注释一定要写在语句组上面,不能写在 语句组下面。
4、代码行右侧的简短注释。对当前代码行做特别说明,一般为单行注释,和代码之间至少用一 个空格隔开,一个源文件中所有的右侧注释最好能上下对齐。
5、复杂的结构体定义比函数更需要注释。
6、复杂的宏定义和变量定义也需要注释。
**标识符命名**
1.  标识符的命名要清晰明了,可以使用完整的单词和大家易于理解的缩写。短的单词可以通 过去元音形成缩写,较长的单词可以取单词的头几个字母形成缩写,也可以采用大家基本 认同的缩写。例如count写成cnt,block写成blk,length写成len,window写 成win,message写成msg,temporary可以写成temp,也可以进一步写成tmp。
2.  内核风格规定变量、函数和类型采用全小写加下划线的方式命名,常量(宏定义和枚举常 量)采用全大写加下划线的方式命名。上面举例的函数名radix_tree_insert、类型 名struct radix_tree_root、常量名RADIX_TREE_MAP_SHIFT等。
3.  全局变量和全局函数的命名一定要详细,不惜多用几个单词多写几个下划线,例如函数 名radix_tree_insert,因为它们在整个项目的许多源文件中都会用到,必须让使用者明确 这个变量或函数是干什么用的。局部变量和只在一个源文件中调用的内部函数的命名可以 简略一些,但不能太短,不要使用单个字母做变量名,只有一个例外:用i、j、k做循环变 量是可以的。
4.  针对中国程序员的一条特别规定:禁止用汉语拼音作为标识符名称,可读性极差。
**函数 **
每个函数都应该设计得尽可能简单,简单的函数才容易维护。应遵循以下原则:
1.  实现一个函数只是为了做好一件事情,不要把函数设计成用途广泛、面面俱到的,这样的 函数肯定会超长,而且往往不可重用,维护困难。
2.  函数内部的缩进层次不宜过多,一般以少于4层为宜。如果缩进层次太多就说明设计得太 复杂了,应该考虑分割成更小的函数来调用(这称为Helper Function)。
3.  函数不要写得太长,建议在24行的标准终端上不超过两屏,太长会造成阅读困难,如果一 个函数超过两屏就应该考虑分割函数了。[CodingStyle]中特别说明,如果一个函数在概念 上是简单的,只是长度很长,这倒没关系。例如函数由一个大的switch组成,其中有非常 多的case,这是可以的,因为各个case之间互不影响,整个函数的复杂度只等于其中一 个case的复杂度,这种情况很常见,例如TCP协议的状态机实现。
4.  执行函数就是执行一个动作,函数名通常应包含动词,例 如get_current、radix_tree_insert。
5.  比较重要的函数定义上面必须加注释,说此函数的功能、参数、返回值、错误码等。
6.  另一种度量函数复杂度的办法是看有多少个局部变量,5到10个局部变量就已经很多了, 局部变量再多就很难维护了,应该考虑分割函数。
**indent工具的使用**
indent的使用方法介绍 :http://blog.csdn.net/dllbl/article/details/2978058