C语言程序除了要符合语言编程规范外,为了提高程序的可读性,C语言代码还需要书写规范和命名规范。书写规范包括空行、空格、成对书写、缩进、对齐、代码行、注释等,命名规范包括变量命名、函数命名等。
1)书写规范
(1)空行。
空行可以使程序的排版更清晰、功能分析更容易,增强程序的可读性。
规则一:定义变量后要空行。尽可能在定义变量的同时初始化该变量,即遵循就近原则。如果变量的引用和定义相隔比较远,那么变量的初始化就很容易被忘记。如果引用了未被初始化的变量,就会导致程序出错。
规则二:每个函数定义结束之后都要加空行。函数内部的功能块间也要加空行,比如上面几行代码完成的是一个功能,下面几行代码完成的是另一个功能,那么它们中间就要加空行,这样看起来更清晰。
(2)空格。
规则一:关键字之后要留空格。例如,const、case等关键字之后至少要留一个空格,否则无法辨析关键字。例如,if、for、while等关键字之后应留一个空格再跟左括号,以突出关键字。
规则二:函数名之后不要留空格,应紧跟左括号,以区别于关键字。
规则三:“,”之后要留空格。如果“;”不是一行的结束符号,其后要留空格。
规则四:赋值运算符、关系运算符、算术运算符、逻辑运算符、位运算符等双目运算符的前后应当加空格。注意,运算符“%”是求余运算符,与printf中%d的“%”不同。因此,%d中的“%”前后不用加空格。
规则五:单目运算符“!”“~”“++”“--”“-”“*”“&”等前后不加空格。
总之,规则五中的是单目运算符,规则四中的是双目运算符,它们应遵循不同的规则。
规则六:数组符号“[]”,结构体成员运算符“.”,指向结构体成员运算符“->”,这类操作符前后不加空格。
规则七:对于表达式比较长的for语句和if语句,为了紧凑起见,可以适当地去掉一些空格。但for和if后面紧跟的空格不可以删,其后面的语句可以根据语句的长度适当地去掉一些空格。例如:
for(i=0;i<10;i++)
“for”和“;”后面保留空格就可以了,“=”和“<”前后的空格可去掉。
(3)成对书写。
成对的符号一定要成对书写,如()、{}。不要写完左括号,然后写内容,最后再补右括号,这样很容易漏掉右括号,尤其是在写嵌套程序的时候。
(4)缩进。
缩进是通过键盘上的Tab键实现的,缩进可以使程序更有层次感。原则是:如果属于同一层级代码,则不需要缩进;如果属于某一个代码的内部代码就需要缩进。
(5)对齐。
对齐主要是针对大括号{}而言的。
规则一:“{”和“}”分别都要独占一行。互为一对的“{”和“}”要位于同一列,并且与引用它们的语句左对齐。
规则二:{}之内的代码要向内缩进一个Tab,且同一层次的要左对齐,层次不同的继续缩进,例如
(6)代码行。
规则一:一行代码只做一件事情,例如只定义一个变量。这样的代码容易阅读,并且便于写注释。
规则二:if、else、for、while、do等语句自占一行,执行语句不得紧跟其后。此外,非常重要的一点是,不论执行语句有多少行,就算只有一行也要加{},并且遵循对齐的原则,这样可以防止书写失误。
(7)注释。
C语言中一行注释一般采用//…的格式,多行注释必须采用/*…*/的格式。注释通常用于重要的代码行或段落提示。在一般情况下,源程序的有效注释量必须在20%以上。虽然注释有助于理解代码,但注意不可过多地使用注释。
规则一:注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多会让人眼花缭乱。
规则二:如果代码本来就是清楚的,则不必加注释。例如:
这里的注释就是多余的注释。
规则三:边写代码边注释,修改代码的同时要修改相应的注释,以保证注释与代码的一致性,不再有用的注释应删除。
规则四:当代码比较长,特别是有多重嵌套的时候,应当在段落的结束处加注释,这样便于阅读。
规则五:每一条宏定义的右边必须要有注释,以说明其作用。
2)命名规范
(1)变量命名。
①变量的命名(见表1-4)规则要求用“匈牙利法则”,也就是开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写,即
变量名=变量类型+变量的英文意思(或缩写)
表1-4 变量命名
②对非通用的变量,在定义时加入注释说明,变量定义应尽可能放在函数的开始处。对一重指针变量的基本定义原则如下。
“p”+变量类型前缀+变量的英文意思(或缩写)(www.xing528.com)
例如:一个float*型一重指针变量应该表示为pfStat。
对多重指针变量的基本定义规则如下。
二重指针:“pp”+变量类型前缀+命名
三重指针:“ppp”+变量类型前缀+命名
……
③全局变量用g_开头,如一个全局的长型变量命名为g_lFailCount,即
变量名=g_+变量类型+变量的英文意思(或缩写)
④静态变量用s_开头,如一个静态的指针变量命名为s_plPerv_Inst,即
变量名=s_+变量类型+变量的英文意思(或缩写)
⑤成员变量用m_开头,如一个长型成员变量命名为m_lCount,即
变量名=m_+变量类型+变量的英文意思(或缩写)
⑥对枚举(enum)变量的命名,要求用枚举变量或其缩写作前缀,并且要求用大写。例如:
⑦对struct、union、class变量的命名要求定义的类型用大写,并要加上前缀,其内部变量的命名规则与变量命名规则一致。
结构一般用S开头,例如:
联合体一般用U开头,例如:
类一般用C开头,例如:
对一般的结构应该定义为类模板,为以后的扩展性考虑,例如:
⑧对常量(包括错误的编码)命名,要求常量名用大写,常量名用英文表达其意思,例如:
其中CM表示类别。
⑨对const变量的命名要求在变量的命名规则前加入c_,即c_+变量命名规则,例如:
(2)函数命名。
函数的命名应该尽量用英文表达出函数完成的功能,遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度不得少于8个字母,例如:
3)函数参数规范
①参数名称的命名参照变量命名规范。
②为了提高程序的运行效率、减少参数占用的堆栈、传递大结构的参数,一律采用指针或引用方式传递。
③为了便于其他程序员识别某个指针参数是入口参数还是出口参数,同时便于编译器检查错误,应该在入口参数前加入const标志,例如:
4)引出函数规范
对于从动态库引出作为二次开发函数公开的函数,为了能与其他函数以及Windows的函数区分,采用类别前缀+基本命名规则的方法命名。例如:对在动态库中引出的一个图像编辑的函数定义为imgFunctionname(其中img为image缩写)。
现给出三种库的命名前缀:
①对通用函数库,采用cm为前缀。
②对三维函数库,采用vr为前缀。
③对图像函数库,采用img为前缀。
对宏定义,结果代码用同样的前缀。
5)文件名(包括动态库、组件、控件、工程文件等)的命名规范
文件名的命名要求表达出文件的内容,要求文件名的长度不得少于5个字母,严禁使用file1、myfile之类的文件名。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。