C编码规范
时间:2016-12-14作者:华清远见
为什么需要编码规范? 见过 很多C语言的初学者写的代码,他们并不懂什么是好的编码 风格,写出来的代码风格各异。有的风格极易导致错误,有的风格让人难以理解,有的风格让人眼花缭乱,有的风格甚至连作者自己都不知道写代码那会自己到底在想什么。 良好的编码风格,并不是官僚制度下产生的浪费大家时间的制度。统一的编码风格,可以让别人很容易理解代码意图,进而快速使用和二次开发,大大节约开发时间。并且极大的简化了代码维护,减少了维护成本。 良好的编码风格,可以让程序员避免一些细节上的缺失。虽然这些东西可能很细微,但若你不注意这些细节,那可能会给整个软件的质量带来极大的影响,所谓“千里之堤毁于蚁穴”。 很多大公司,例如google,华为,腾讯等,都会在新员工入职培训的阶段培训编程标准。每个员工都必须遵循公司内部制定的编程标准。程序就像一个作品,有素质有修养的程序员的作品必然是一图精美的图画,一首美妙的歌曲,一本赏心悦目的小说。 如何编写代码 注释 注释是源码中非常重要的部分,通常源程序中的注释量必须在15%~20%以上。注释的原则是有助于程序的阅读和理解。所以注释语言必须准确,易懂,简洁。注释不宜过多,也不宜太少。 文件或者模块的注释 对于一个文件或模块注释,应该有文件名称,生成日期,作者名字,模块描述,版本编号,修改记录等。例如: /**************************************** 2.函数的注释 对于函数,我们需要标注的内容主要是:函数名称,参数说明,功能描述,返回值说明等。例如: /*************************************************** 3.其他的注释 i. 边写代码边注释,对于具有一定含义的变量、常量、数据结构以及相关算法,若其名称不能充分说明其用途或需要添加额外的说明,都必须进行注释。 ii. 注释一般位于需要注释的语句相邻的上方或者右方。禁止在代码的下方写注释。 iii. 将注释与其上面的代码用空行间隔。 iv. 注释的格式尽量一致,建议使用/*..........*/ 二、代码的排版 良好的排版是优秀代码风格的关键。以下是代码排版需要主动的事项。 1.程序块要采用缩进风格编写,缩进的空格数是4个 2.相对独立的代码块之间,变量的说明之后,必须加入空行。 例如: if ( ! is_empty(list))) 3.较长的语句要分成多行书写。循环、判断等语句中若有较长的表达式或语句,要进行适当的划分。 4.不允许把多个短语句写在一行中,一行只写一条语句。 例如: rect.length = 0; rect.width = 0; 5.if,for,do,while,case,switch,default等独占一行,且其中语句部分无论几行都需要加{}。 6.注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。 三、标识符命名 标识符的命名要清晰,有明确含义。使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。 1.常量命名使用大写 例如 :MAX_VALUE 2.变量命名禁止取单个字符,建议除了要有具体含义外,还能表明存储类型、数据类型等,但是i,j,k作为局部不循环变量是可以的。 变量命名可以采用匈牙利命名法 ,变量的第一个字母小写, 表示其数据类型,如 int iIndex; char cIndex; 也可以采用linux通用的命名规范,采用‘_’分割短语命名一个变量,例如一个变量保存图书数目,可以命名为 int number_book; 下列所示的局部变量方法可以借鉴: int liv_width; 其解释如下: l 局部变量(local) 3.标示符的风格要自始至终保持一致,不可来回变换。 4.避免不易理解的数字,要用有意义的宏来代替。例如: #define MAX 128 四、宏 1.用宏定义表达式的时候,要使用完备的括号。例如: #define MAX(a,b) a > b ? a : b 2.使用宏的时候,不允许参数发生变化。例如: 如下用法会产生错误: #define SQUARE(a) ((a) * (a)) 3.将常量声明为宏,防止代码中的硬编码。 比如:int user[100]; 谁也不知道100到底表示什么含义,你可以定义一个宏来表示其含义,比如大用户数量MAX_USER。若程序中突然出现for(i = 0;i < 100;i++)这样的代码,你或许根本不知道100表示什么含义。再或者你要改变这个值,100出现几次就需要修改几个位置 ,这就是硬编码带来的后果。 4.头文件中的预编译 当多个文件同时包含一个头文件的时候,#ifndef是个很关 键的东西。它能避免重复包含头文件所带来的命名冲突。 一般的格式如下: 在/fad/cde.h文件中 #ifndef FAD_CDE_H 五、函数 1.对于所调用的函数的错误返回码,要进行仔细,全面的处理。 2.函数的规模尽量限制在200行以内。 3.一个函数仅完成一件事情,多功能的函数,可能会使函数的理解、测试、维护变得困难。 4.检查所有参数输入的有效性,可以使用断言。 六、头文件和源文件 一般来说,头文件中是声明,源文件中是定义。源文件要编译成库文件,若别人要使用你的函数,就要引用你的头文件,所以头文件一般是变量、宏定义、枚举、结构和函数接口的声明,源文件则是实现的细节。 头文件和源文件大的用处就是声明和实现分开。直接把函数实现写到头文件中是很不好的习惯。
发表评论
|