编码风格

最近上班由原来的android转为linux c开发,由于以前没有做过c方面的编码工作,又常听人说一个良好的编码风格不仅可以有助于读者更容易理解你的代码,而且更能体现你专业的编码规范,所以我打算抽点时间学些c的代码规范。一下都是从网上搜的一些编码规范,加上我平时看的一些开源代码总结出来的。

要说明的是主流的编码风格有好几种,不必循规蹈矩,选择一种适合自己的最重要

1.关键字if, while, for与其后的控制表达式的(括号之间插入一个空格分隔,但括号内的表达式应紧贴括号。例如 if  (0==i)。

2.双目运算符的两侧插入一个空格分隔,单目运算符和操作数之间不加空格。

例如i  =  i+1,++i,!(i<1),-x,&a[1]等。

3.后缀运算符和操作数之间也不加空格,例如取结构体成员s.a、函数调用foo(arg1)、取数组成员a[i]。

4. ,号和;号之后要加空格,这是英文的书写习惯,例如for(i=1;  i<10;  i++)

foo(arg1,  arg2)。

5.以上关于双目运算符和后缀运算符的规则不是严格要求,有时候为了突出优先级也可以写得更紧凑一些,例如for(i=1;i<10;i++)、distance=sqrt(x*x+y*y)等。但是省略的空格一定不要误导了读代码的人,例如a||b&&c很容易让人理解成错误的优先级。(最后一句不懂)

6.有的人喜欢在变量定义语句中用Tab字符,使变量名对齐,这样看起来也很好,但不是严格要求。

7. if/else、while、do/while、for、switch这些可以带语句块的语句,语句块的{和}应该和关键字写在一起,用空格隔开,而不是单独占一行。

8.函数定义的{和}单独占一行,这一点和语句块的规定不同。

9.代码中每个逻辑段落之间应该用一个空行分隔开。例如每个函数定义之间应该插入一个空行,头文件、全局变量定义和函数定义之间也应该插入空行。(不同部分之间)

10.一个函数的语句列表如果很长,也可以根据相关性分成若干组,用空行分隔,这条规定不是严格要求,一般变量定义语句组成一组,后面要加空行,return之前要加空行。(函数中变量定义是一部分,逻辑操作是一部分,return是一部分,逻辑操作也可按相关性分成几部分)

11.单行注释应采用/*comment*/的形式,用空格把界定符和文字分开。多行注释最常见的是这种形式:
/**Multi-line*comment*/
也有一些更花哨的形式:
/************ 
Multi-line comment
************/
或者:
/*************\
* Multi-line *
* comment *
\*************/

12.全局变量和全局函数的命名一定要详细,不惜多用几个单词多写几个下划线,例如函数名radix_tree_insert,因为它们在整个项目的许多源文件中都会用到,必须让使用者明确这个变量或函数是干什么用的。局部变量和只在一个源文件中调用的内部函数的命名可以简略一些,但不能太短,不要使用单个字母做变量名,只有一个例外:用i、j、k做循环变量是可以的。

----------------------------------------------------------------------------------------------------------------

每个函数都应该设计得尽可能简单,简单的函数才容易维护。应遵循以下原则:


1. 实现一个函数只是为了做好一件事情,不要把函数设计成用途广泛、面面俱到的,这样的函数肯定会超长,而且往往不可重用,维护困难。
2. 函数内部的缩进层次不宜过多,一般以少于4层为宜。如果缩进层次太多就说明设计得太复杂了,应该考虑分割成更小的函数来调用(这称为Helper Function)。
3. 函数不要写得太长,建议在24行的标准终端上不超过两屏,太长会造成阅读困难,如果一个函数超过两屏就应该考虑分割函数了。如果一个函数在概念上是简单的,只是长度很长,这倒没关系。例如函数由一个大的switch组成,其中有非常多的case,这是可以的,因为各个case之间互不影响,整个函数的复杂度只等于其中一个case的复杂度,这种情况很常见,例如TCP协议的状态机实现。
4. 执行函数就是执行一个动作,函数名通常应包含动词,例如get_current、radix_tree_insert。
5. 比较重要的函数定义上面必须加注释,说此函数的功能、参数、返回值、错误码等。
6. 另一种度量函数复杂度的办法是看有多少个局部变量,5到10个局部变量就已经很多了,局部变量再多就很难维护了,应该考虑分割函数。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值