C语言_程序代码编写规范
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序代码编写规范
(初级程序员讨论版)
前言
一个好的程序编写规范是编写高质量程序的保证。
清晰、规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性。
说明
∙此文挡还在完善改进中,如有不足,欢迎指正。
∙本文档主要适用于刚刚开始接触编程的初学者。
∙对于具有一定工程项目开发经验的程序员,建议学习C语言程序代码编写规范—高级版。
目录
1代码书写规范
2注释书写规范
3命名规范
内容
1 代码书写规范
1.1函数定义
每个函数的定义和说明应该从第1列开始书写。
函数名(包括参数表)和函数体的花括号(“{”和“}”)应该各占一行。
在函数体结尾的括号(“}”)后面应该加上注释,注释中应该包括函数名,这样比较方便进行括号配对检查,也可以清晰地看出来函数是否结束。
范例1:函数的声明
void matMyFunction(int n)
{
……
} /* matMyFunction*/
if、for、do、while、case、switch、default各占一行,且if、for、do、while 后无论语句多少都要加花括号
1.2空格的使用
使用空格分割所有演算符号和操作数。
这条规则的例外是“->”,““.”, “()”和“[]”,这些操作符和操作数之间不空格。
当需要把一个程序行的内容分成几行写时,操作符号应该放在行末,而不是下一行的开头。
逗号后,分号后(for循环)
比较、赋值、算术、逻辑等双目运算符前后加空格
!、++、--等单目运算符与运行表达式之间不加空格
->、.前后不加空格
if、for、while、switch等后面加空格,突出关键字
1.3缩进的设置
代码书写应该遵从结构化的要求,采用缩进的格式。
最小缩进量为4个空格,整个文件内部应该统一,不要混用Tab键和4个空格这两种情况,因为不同的编辑器对Tab键的处理方法不同。
1.4折行的使用
∙每行的长度不要超过80个字符,当程序行太长时,应该分行书写。
∙分行时应该按照自然的逻辑关系进行,例如:不要把一个简单的逻辑判断写在两行上。
∙分行后的缩进应该按照程序的逻辑关系进行对齐。
例如:参数表折行后,下面的行应该在参数表左括号的下方。
范例2:折行的格式
dwNewShape = matAffineTransform(coords, translation,
rotation);
if ( ( (new_shape.x > left_border) &&
(new_shape.x < right_border) ) &&
( (new_shape.y > bottom_border) &&
(new_shape.y < top_border) ) )
{
draw(new_shape);
}
1.5嵌套语句(语句块)的格式
对于嵌套式的语句--即语句块(如,if、while、switch等)应该包括在花括号中。
花括号的左括号应该单独占一行,并与关键字对齐。
建议即使语句块中只有一条语句,也应该使用花括号包括,这样可以使程序结构更清晰,也可以避免出错。
建议对比较长的块,在末尾的花括号后加上注释以表明该语言块结束。
范例3:嵌套语句格式
if (value < max)
{
if (value != 0)
{
func(value);
}
}
} else {
error("The value is too big.");
} /* if (value < max) */
1.6 程序放置顺序
1、#include <C的标准头文件>
2、#include "用户自定义文件"
3、#define 宏定义
4、全局变量定义
5、函数原型声明
6、main函数定义
7、用户自定义函数
2 注释书写规范
注释必须做到清晰,准确地描述内容。
对于程序中复杂的部分必须有注释加以说明。
注释量要适中,过多或过少都易导致阅读困难。
2.1注释风格
∙C语言中使用一组(/* … */)作为注释界定符。
∙注释内容尽量用英语方式表述。
∙注释的基本样式参考范例4。
∙注释应该出现在要说明的内容之前,而不应该出现在其后。
∙除了说明变量的用途和语言块末尾使用的注释,尽量不使用行末的注释方式。
范例4:几种注释样式
/*
* ************************************************
* 强调注释
* ************************************************
*/
/*
* 块注释
*/
/* 单行注释 */
int i; /*行末注释*/
2.2何时需要注释
∙如果变量的名字不能完全说明其用途,应该使用注释加以说明。
∙如果为了提高性能而使某些代码变得难懂,应该使用注释加以说明。
∙对于一个比较长的程序段落,应该加注释予以说明。
如果设计文档中有流程图,则程序中对应的位置应该加注释予以说明。
∙如果程序中使用了某个复杂的算法,建议注明其出处。
∙如果在调试中发现某段落容易出现错误,应该注明。
列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系
/**********************************
function:函数名称
description:函数功能描述
calls:被本函数调用的函数清单
called by:调用本函数的函数清单
input:输入参数,每个参数的作用、取值及关系
output:输出参数说明
return:函数返回值的说明
others:其它说明
**********************************/
3 命名规范
3.1常量、变量命名
用#define定义的符号常量全部采用大写。
变量命名的基本原则:
∙可以选择有意义的英文(小写字母)组成变量名,使人看到该变量就能大致清楚其含义。
∙如果使用缩写,应该使用那些约定俗成的,而不是自己编造的。
∙多个单词组成的变量名,每个单词的首字母应该大写。
如:dwUserInputValue。
∙同一行内不要定义过多变量
∙同一类的变量在同一行内定义,或相邻行定义
∙数组、指针复杂类型定义放在定义区的最后
∙变量定义区不做较复杂的变量赋初值
∙
3.2函数命名
函数命名原则与变量命名原则基本相同。
对于初学者,函数命名可以采用“FunctionName”的形式。