![Visual C++从入门到精通(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/338/27563338/b_27563338.jpg)
2.6 程序编码规范
俗话说,“没有规矩,不成方圆”,程序编码也不例外。通常每个软件公司都有一套自己的编码规则,这样既有利于形成自己的风格,又有利于公司内部人员的沟通和交流。本节将介绍程序编码的一些注意事项和通用规则。
2.6.1 合理使用注释
注释是用于帮助程序员阅读程序的一种语言结构,它不会对程序的功能产生任何影响,也不会增加可执行代码的长度,因为编译器在编译代码时会将注释过滤掉。在程序中注释通常有两个作用:一是对代码进行简要解释;二是标注文件的版权、作者、版本号等信息。例如,下面的注释是许多开发人员标注文件采用的通用格式。
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P85_28289.jpg?sign=1739267932-jZedfnJ0v19NmlyKv3vlfNhQgLnTFwP7-0-198b9bcbe8c98e86ab55ffe9141f399e)
在C++语言中,注释有两种,一种是行注释“//”,另一种是语句注释“/*…*/”。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P85_28349.jpg?sign=1739267932-0gy5gINkmoD3yY6HEGjNTEEjC4ukZNOV-0-e29645581c9197124c48c528aff8c8ad)
行注释“//”只注释当前行,语句注释“/*…*/”能够注释掉“/*”与“*/”之间的语句。
注意
在使用语句注释时,需要注意“/*”与“*/”并不能按层次对应。
例如,下面的注释是非法的。
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P85_28429.jpg?sign=1739267932-qOJQK28dH1RrZMZrpLLXnUg3xlufAzUZ-0-081190f0912f047b4f577443bcbd58c0)
在上面的代码中,外层注释“/*”是与内层注释“*/”匹配的,而不是与外层注释“*/”匹配。因此,代码“int age = 20;printf(“%d\n”, age)”没有被注释掉,外层注释“*/”成了代码的一部分,代码不能够被编译。
此外,在使用注释时还应注意以下事项。
(1)不可过多地使用注释
注释只是对代码的简要说明,并不是文档,注释过多,会让人感觉眼花缭乱,有些喧宾夺主的“味道”。如果代码简洁、清楚,则不需要使用注释。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P86_28508.jpg?sign=1739267932-jbSgOkUBR2VHsI7pJTP0ILZq222zHQJb-0-5fb91dce039e85441ff51e9fcd4969be)
上面的代码注释显得多此一举了。但是本书中出现的代码多数都标有注释,其目的一是使页面更加工整,连读多行注释,突然一段代码没有注释,页面显得有些凌乱;二是使读者通过注释中的文字描述来理解代码的作用。实际上,用户在开发程序时没有必要这么做(每行都标有注释)。
(2)代码与注释同时进行
在写代码后马上写注释,甚至在写代码前,应先写注释。此外,修改代码的同时修改注释,使注释与代码的功能对应。
(3)注释要简洁、准确
在写注释时,不要写得过长,将代码的语义描述清楚即可。注释一定要准确,不要产生歧义,错误的注释会适得其反,使其他开发人员产生误解。
(4)注释位置要适当
注释通常放置在代码的上方或右方,不要放置在代码的下方,让人误以为是下行代码的注释。
(5)较长的代码要分段注释
在写某个函数时,如果代码较长,层次结构比较复杂,则要在每层结束后添加注释标识。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P86_28513.jpg?sign=1739267932-ImNyMXPGr9kD2nJD535XtodGe4YNMSct-0-bd039f91f8a240862296c53eaa3a5724)
2.6.2 统一代码缩进
在编写代码时要统一代码的缩进,如确定每一层的代码缩进为几个空格或一个tab制表位,这样编写出的代码既工整又利于阅读。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P87_28586.jpg?sign=1739267932-4VRXwRkheG33GdFAMSITNIDrVh0Ikm6p-0-9538789c883d8e7fa3f3c092a492a2ab)
技巧
在Visual C++ 6.0开发环境中,选择一段代码,然后按Alt+F8键可以根据缩进情况对齐凌乱的代码。
2.6.3 代码换行
在开发程序时,有时一行代码会很长。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P87_28711.jpg?sign=1739267932-r7MpKZ06wr18gaYbioMgBuABwEUjeG2a-0-0015f8a668c28cb08cdd33733a3b23ed)
在书写代码时,对于长代码应将其分成多行显示。例如,将上述代码转换为如下格式,让人产生一目了然的感觉。
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P87_28731.jpg?sign=1739267932-8XyKzfPFf9kc9FAQYkrCsJoe28wFjHwv-0-a4206b75cb87c4db93ce5e64cffa82a4)
在分行时,应保证在低优先级运算符处分行,运算符放在新行的开始位置,拆分的新行要按一定规则缩进。
2.6.4 合理使用空格
空格在程序中不起任何作用,但是合理地使用空格会使代码更易于阅读和理解。如下是笔者总结的空格使用规则。
(1)关键字之后使用空格
在程序中使用关键字时,关键字之后建议保留一个空格,以突出显示关键字。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P88_28790.jpg?sign=1739267932-RdOwmSLsAHBnHSID4111shAtPPaeSlp2-0-ee5862cb911aa3a649998bdffd8d5344)
if关键字与“(”之间添加空格以示区分关键字。
(2)逗号之后应添加空格
在定义函数时,如果函数有多个参数,各个参数之间需要使用“,”分隔。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P88_28810.jpg?sign=1739267932-x3foGeIRziBWNGGjdWPPpcDMk3jvxt2N-0-fa8e18ee15bddb1c454db6613ff3e14d)
(3)赋值运算符、关系运算符和算术运算符等二目元运算符前后加空格
对于二目元运算符,为了使表达式更清晰,应在运算符前后添加空格。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P88_28830.jpg?sign=1739267932-qaTFGw50ILuTjQVywtiXEfD5BEkKAssL-0-a0f5458df67f30752eef136967d0ab58)
但是,对于for语句和if语句,为了使表达式更紧凑,可以适当地去掉空格。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P88_28845.jpg?sign=1739267932-h1ex3zIjSemVAYN4FqLWG0kgeH5D8J3F-0-83c5ea3f5cbe8f0a7b4ae637ed5998bd)
(4)“,”“)”和“;”号向前紧跟,与前边的标识符之间不留空格
当程序代码中出现“. ”“)”和“;”等符号时,与前边的标识符之间不留空格。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P88_28870.jpg?sign=1739267932-fW4jDzJeEiSeobSy239gYHW5xZRTu7A6-0-87774bf68b37c7352441c04bb8e7bf84)
2.6.5 命名规则
提到命名规则,不得不说的是微软公司的“匈牙利命名规则”。其主导思想是在变量或函数名前加前缀,以增强对程序的理解。例如,定义一个变量int x,如果采用“匈牙利命名规则”,应写为“int ix”,其中前缀i表示整型。
使用“匈牙利命名规则”的最大缺点是烦琐,因此许多开发人员并不赞同使用“匈牙利命名规则”。本节笔者不会定义一套命名规则,因为很难定义适合于所有开发人员的命名规则。这里只介绍一些通用的命名规则。
(1)标识符命名应直观、易懂
标识符的命名应该让人望文知意,而不应该不着边际。标识符的命名应采用英文单词、英文单词的缩写或英文单词的组合,而不要以汉语拼音来命名标识符。例如,“int MaxValue;”不要定义为“int zdz;”,让人难以理解。
(2)标识符的命名不要太长
标识符的名称需要体现其含义,但是名称不能太长。例如,“int LacaoTemporaryValue;”应写为“int TmpValue”。对于一些局部变量,可以使用单个的字母作为标识符的名称,如“int i, j, m, n;”等。
(3)标识符的区分不要以大小写来区分
众所周知,C++语言是区分大小写的。但是,在命名标识符时,不要以此来区分不同的标识符,那样容易让人误解。例如,下面两个函数的命名并不是好的习惯,在调用时很容易误解。
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P89_28889.jpg?sign=1739267932-lKfjH3DLTU22cO8x3V3onicuj0O2WmRb-0-693cb5948ed7edf46d338ea393d51e67)
(4)程序中不要出现同名的全局变量和局部变量
当出现全局变量与局部变量同名时,全局变量被隐藏,而不会产生编译错误,但是容易让人误解。
(5)变量的命名应采用名词或形容词+名词的形式
在命名变量时,建议以名词或形容词+名词的形式。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P89_28899.jpg?sign=1739267932-HkGPvZVkCk9Uzuf5EBtQNbgKLvEY4cuA-0-64292d767327c36aa0e48e445b4e9f95)
(6)函数的命名应使用动词或动词+名词的形式
对于全局函数或类成员函数,应使用动词或动词+名词的形式。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P89_28914.jpg?sign=1739267932-TYJMFgNzPKMR7XSfp4yfbdBpaAyBUpfp-0-5984f05d9c3ea3119e89edf042c519a1)
(7)标识符的命名尽量不使用数字编号
许多程序开发人员在命名标识符时,使用数字编号区分变量。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P89_28924.jpg?sign=1739267932-bHRC11nvu26ChgRoh9SDDs766HQCovr6-0-882970908a61ffbd51220588c8fbb084)
这并不是好的命名习惯,除非逻辑上确实需要编号,否则不要使用类似的命名习惯。
(8)类和函数名首字母应大写
在命名类和函数名时,首字母应大写。如果类或函数名由多个单词构成,每个单词的首字母都应大写。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P90_28942.jpg?sign=1739267932-UmachQxUdjH9Ldl5pHIJVWpox9nVaNEE-0-33f34958d9ab69be2d51e305d9c6ed02)
(9)局部变量和参数首字母应小写
在命名局部变量或函数参数时,首字母应小写。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P90_28952.jpg?sign=1739267932-yRBl8gGu6Zi67cAW5x9LsPUDutMXxZp7-0-c18bfad337ca0aa1c0cf5cf04db46a90)
(10)常量的所有字母应大写
对于常量,所有字母应大写。如果常量由多个单词构成,单词间用下画线分隔。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P90_28962.jpg?sign=1739267932-gkVGLPb29TkAer6tPFYbfiJ86AJTXc3k-0-f96b50710f4ee801d9c32b44806c09ba)