![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=1739367259-jyjYa4zfbACfoxCip2H7axVZuAvsoW8h-0-806e87603041fbb5adf10d33cd5d7b4d)
在C++语言中,注释有两种,一种是行注释“//”,另一种是语句注释“/*…*/”。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P85_28349.jpg?sign=1739367259-rPRruUCzZ4j9LTIVSIyTVhtGzBpHGz0n-0-f44c989d19f43c5774cc34cc3666fa29)
行注释“//”只注释当前行,语句注释“/*…*/”能够注释掉“/*”与“*/”之间的语句。
注意
在使用语句注释时,需要注意“/*”与“*/”并不能按层次对应。
例如,下面的注释是非法的。
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P85_28429.jpg?sign=1739367259-hZkaITSiy0ZZ0HCLiAdVjzFWcTdYdL2c-0-a8d16450964deab74a2d2b9894220256)
在上面的代码中,外层注释“/*”是与内层注释“*/”匹配的,而不是与外层注释“*/”匹配。因此,代码“int age = 20;printf(“%d\n”, age)”没有被注释掉,外层注释“*/”成了代码的一部分,代码不能够被编译。
此外,在使用注释时还应注意以下事项。
(1)不可过多地使用注释
注释只是对代码的简要说明,并不是文档,注释过多,会让人感觉眼花缭乱,有些喧宾夺主的“味道”。如果代码简洁、清楚,则不需要使用注释。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P86_28508.jpg?sign=1739367259-OrUST0aAYh7b8WfJt1DTIFJ5jEZLhQaQ-0-f947dcd046dfe0e380e5c0a23a31440c)
上面的代码注释显得多此一举了。但是本书中出现的代码多数都标有注释,其目的一是使页面更加工整,连读多行注释,突然一段代码没有注释,页面显得有些凌乱;二是使读者通过注释中的文字描述来理解代码的作用。实际上,用户在开发程序时没有必要这么做(每行都标有注释)。
(2)代码与注释同时进行
在写代码后马上写注释,甚至在写代码前,应先写注释。此外,修改代码的同时修改注释,使注释与代码的功能对应。
(3)注释要简洁、准确
在写注释时,不要写得过长,将代码的语义描述清楚即可。注释一定要准确,不要产生歧义,错误的注释会适得其反,使其他开发人员产生误解。
(4)注释位置要适当
注释通常放置在代码的上方或右方,不要放置在代码的下方,让人误以为是下行代码的注释。
(5)较长的代码要分段注释
在写某个函数时,如果代码较长,层次结构比较复杂,则要在每层结束后添加注释标识。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P86_28513.jpg?sign=1739367259-TPTVE9585dDaIeHbFLZX8c0ynwko77Us-0-de08e9c6b9998187833904f10376c9d9)
2.6.2 统一代码缩进
在编写代码时要统一代码的缩进,如确定每一层的代码缩进为几个空格或一个tab制表位,这样编写出的代码既工整又利于阅读。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P87_28586.jpg?sign=1739367259-bFCoQHk6jMG3VHmpvG0FOIba0vOhl3LQ-0-4ae003a3d30a1c7f7970c5feeb0ac9df)
技巧
在Visual C++ 6.0开发环境中,选择一段代码,然后按Alt+F8键可以根据缩进情况对齐凌乱的代码。
2.6.3 代码换行
在开发程序时,有时一行代码会很长。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P87_28711.jpg?sign=1739367259-jnu9h9lAuBkCA7nCqfdrLCpE90wPskD2-0-3c8029625577bab27b910537593ca6c5)
在书写代码时,对于长代码应将其分成多行显示。例如,将上述代码转换为如下格式,让人产生一目了然的感觉。
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P87_28731.jpg?sign=1739367259-sI9ArtJPqxYWZudc1QTgkO3Y69NT3Uhv-0-31ef27073b639c4151c4e648ec9eca0d)
在分行时,应保证在低优先级运算符处分行,运算符放在新行的开始位置,拆分的新行要按一定规则缩进。
2.6.4 合理使用空格
空格在程序中不起任何作用,但是合理地使用空格会使代码更易于阅读和理解。如下是笔者总结的空格使用规则。
(1)关键字之后使用空格
在程序中使用关键字时,关键字之后建议保留一个空格,以突出显示关键字。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P88_28790.jpg?sign=1739367259-aLgmvsl5MaPQOJUNe3W9DtKwJYcAlXih-0-d5796de2cf18dadbe1667a7732cbe141)
if关键字与“(”之间添加空格以示区分关键字。
(2)逗号之后应添加空格
在定义函数时,如果函数有多个参数,各个参数之间需要使用“,”分隔。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P88_28810.jpg?sign=1739367259-lbdTQSZm1p42jPUzDXdnUR5F7Ie1KotB-0-261e4f44ca25f6a6a59e95391d514397)
(3)赋值运算符、关系运算符和算术运算符等二目元运算符前后加空格
对于二目元运算符,为了使表达式更清晰,应在运算符前后添加空格。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P88_28830.jpg?sign=1739367259-I7Mz9FJijdZavvkJN7zcmhpV3H4jMGmo-0-736b748eaafbc294973deed780771b3e)
但是,对于for语句和if语句,为了使表达式更紧凑,可以适当地去掉空格。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P88_28845.jpg?sign=1739367259-8qoTlXbHtKHVP8x5dk5SgEJkkLIJhE9f-0-0c5d4f33928ffbc386883c1e7890cc87)
(4)“,”“)”和“;”号向前紧跟,与前边的标识符之间不留空格
当程序代码中出现“. ”“)”和“;”等符号时,与前边的标识符之间不留空格。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P88_28870.jpg?sign=1739367259-TMEByJjC0A02woTbntZsrQ1JYvhXdykl-0-d4b01928c46984bae43a3e44bd5e0add)
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=1739367259-zqt2KnJvIcw473MZnCsC0NaGiJ86h6kP-0-46ce36f111abe2ea67f2a6f888d3c237)
(4)程序中不要出现同名的全局变量和局部变量
当出现全局变量与局部变量同名时,全局变量被隐藏,而不会产生编译错误,但是容易让人误解。
(5)变量的命名应采用名词或形容词+名词的形式
在命名变量时,建议以名词或形容词+名词的形式。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P89_28899.jpg?sign=1739367259-rJQzFVRim2r3pvcslEn6O79o4wOvvFl9-0-849a9bbfc7d1a39a7909df82928491e8)
(6)函数的命名应使用动词或动词+名词的形式
对于全局函数或类成员函数,应使用动词或动词+名词的形式。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P89_28914.jpg?sign=1739367259-qMz2P4fWT20SzMjLJ4QBcGQ9H3bIx7Lk-0-9b5abe62cab463d8af91b2500bac854d)
(7)标识符的命名尽量不使用数字编号
许多程序开发人员在命名标识符时,使用数字编号区分变量。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P89_28924.jpg?sign=1739367259-ykvOZ7Fkfcp5qHkXF2WBxGNirPE2XEEi-0-18b665a397b5806345d3a585c285fa0a)
这并不是好的命名习惯,除非逻辑上确实需要编号,否则不要使用类似的命名习惯。
(8)类和函数名首字母应大写
在命名类和函数名时,首字母应大写。如果类或函数名由多个单词构成,每个单词的首字母都应大写。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P90_28942.jpg?sign=1739367259-DsVzL99pb77A2FWyNuOKJYFn7wmQbj1e-0-49a1d9e11fc56e519ac2a206a4dcecd7)
(9)局部变量和参数首字母应小写
在命名局部变量或函数参数时,首字母应小写。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P90_28952.jpg?sign=1739367259-OO4MyAAIWEs2PRZBfMrsaceFuhCD6Jlz-0-80f2a72ae506c5b0b5bc2dea0d291eac)
(10)常量的所有字母应大写
对于常量,所有字母应大写。如果常量由多个单词构成,单词间用下画线分隔。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P90_28962.jpg?sign=1739367259-Uf6WyaDFZnNF7hmU55Yc3YiIX66IyAnx-0-e3c4bf76e38fff41e048624e110640e1)