1。关键字 if, while, for 后有一个空格
2。=号之类的双目运算符两侧都有空格
3。后缀运算符和操作数之间不加空格 例如 s.a , foo(argu) , a[i]
4。, 号和 ; 号之后要加空格,例如 foo(argu1, argu2) for (i=0; i<20; i++)
5。关于双目运算符两侧加空格可以灵活规定,例如 distance = sqrt(x*x + y*y),突出结合方式
6。如果程序需要换行,则要与上一行的表达式对齐 foo(sqrt(x*x + y*y))
a[i-1] + b[i-1] + c[i-1])
7。较长的字符串可以段成多个字符串,并且要对齐
printf(“This is such a long stenance that”
"it can not be leld\n”); 这个 print函数中的字符串就跟一个是一样的
8。有的人喜欢在变量定义语句中使用 Tab 字符,使变量名对齐。
int a, b;
double c;
9。关于缩进的规则 建议使用 tabstop=8,看起来层次非常明显
10。if/else , while , do/while , for , switch 等语句块的大括号,不要单独占一行 , 建议 if () {} ,并且大括号
之前要有个空格。
11。函数定义的大括号,{},要单独占一行。
12。switch语句中的case,default对齐写,
switch风格switch (c) { case 'A':haha;break; case 'B':haha;break; default :oo; }
13。代码中没个逻辑段落之间应该有一个空格分开,例如全局变量与函数之间,或者函数与函数之间。
14。一个函数内,语句列表很长,分组,例如变量定义为一组加空格,语句,return 0 是一组,加空格。
15。单行注释 /* comment */ 用空格把定界符和注释分开。多行注释风格如下
多行注释/** Multi-line* comment*/
16。使用注释的场合
- 整个源文件顶部。说明此模块信息。顶头写,不缩进
- 函数注释,说明此函数的功能,参数,返回值,错误等等,卸载函数定义上侧,和此函数之间不留空行,顶头写
- 相对独立的语句注释,对这一组语句做特别说明,在语句组上侧,和此语句组不留空行,与当前与剧组缩进一致
- 代码右侧简短注释,对当前代码行做特别说明,一般为单行注释,和代码之间至少用一个空格分开,最好能上下对齐。
函数内的注释要尽可能少,写注释主要是未了 说明你的代码“能做什么”比如函数接口的定义,而不是为了说明“怎么做”,只要代码写的清楚,“怎么做”是一目了然的,除非是特别需要提醒注意的地方菜使用函数内的注释。 - 复杂的结构体定义比函数更需要注释。
- 复杂的宏和变量声明也需要注释。
17。标识符命名
- 清晰明了,可以使用完整单词和易于理解的缩写,短的单词可以采用去元音的缩写形式,长的单词可以取单词的头几个字母形成缩写。
- 内核编码风格规定变量,函数和类型采用全小写加下划线_的方式命名,常量(比如宏定义和枚举常量)采用全大写加下划线的方式,例如 函数 radix_tree_insert 类型名 struct radix_tree_root,常量RADIX_TREE_MAP_SHIFT等 ( 不要使用匈牙利命名法)C++中可以使用大小写字母,叫做CamelCase
- 全局函数和全局变量的命名一定要详细,不惜多用几个单词多写几个下划线,例如radix_tree_insert,因为它们在整个项目的许多源文件中都会用到,必须让使用者明确这个函数或变量是干什么用的。局部变量和只在一个源文件中调用的内部函数的命名可以简略一些。但不能太短,尽量不要使用单个字母,只有一个例外:用 i , j , k 做循环变量可以。
- 禁止使用汉语拼音做标识符。
18。函数 ( 每个函数都应该尽可能的简单,以下内容如果不能满足,考虑分割函数)
- 实现一个函数只是为了做好一件事情
- 函数内部缩进不易过多,一般最多不能超过4层。
- 函数不要写的太长,建议在24行的标准终端上不超过两屏,太长会造成阅读困难。如果一个函数在概念上是简单的,只是长度长了一点,没关系。例如一个函数是由一个大的switch语句组成,其中有很多个case,这是可以的。
- 执行函数就是执行一个动作,函数名通常应包含动词。例如 get_current
- 比较重要的函数定义上侧必须加注释,说明函数的功能,参数,返回值,错误码等等
- 另一个度量函数复杂度的办法是看有多少个局部变量,一般5-10个局部变量已经很多了。
19。indent工具(可以格式化代码的工具)参数 –kr –i8