注释
本节阅读量:
注释是程序的笔记,不会被编译器编译,用来记录程序相关信息,作为程序的文档。。
C++有两种相同功能类型注释
单行注释
使用「//」做单行注释。一行代码中,「//」后面的内容会被编译器忽略。
1
|
std::cout << "Hello world"; // 这里的所有内容都不会被编译
|
单行注释用来对单行代码简单说明。
1
2
3
|
std::cout << "Hello world\n"; // std::cout是iostream库中的功能
std::cout << "长长长长长长长长长长长长长长长长长长长长长\n"; // 这类注释使代码不容易阅读
std::cout << "短短短\n"; // 尤其代码有长有短
|
代码较长时,在代码后注释,会使代码与评论不方便阅读。
如果代码较短,可将注释对齐,如下
1
2
3
|
std::cout << "Hello world\n"; // std::cout是iostream库中的功能
std::cout << "Aa\n"; // 这样的注释
std::cout << "Bb\n"; // 容易阅读
|
代码较长时,可将注释放到代码前一行
1
2
3
4
5
6
7
8
|
// std::cout是iostream库中的功能
std::cout << "Hello world\n";
// 这样的注释
std::cout << "长长长长长长长长长长长长长长长长长长长长长\n";
// 容易阅读ß
std::cout << "短短短\n";
|
上面是代码片段,不是完整程序,无法编译。
如果要编译代码片段,变成完整的程序,需要放在main函数中:
1
2
3
4
5
6
7
8
|
#include <iostream>
int main()
{
// 将想要编译的代码片段放到这里即可,然后编译运行
return 0;
}
|
多行注释
「/*」与「*/」之间的内容,也会被编译器忽略。
1
2
3
|
/* 这是多行注释
这一行会被忽略
这一行也是 */
|
有时为了美观,会在每行前都加上「*」。
1
2
3
4
|
/* 这是多行注释
* 这一行会被忽略
* 这一行也是
*/
|
多行注释无法嵌套使用,如下例子中,会有未预期的结果
1
2
|
/* 这是多行注释 /* 注释 */ 这里已经不在注释中 */
// 上一行的注释在第一个「*/」 已经结束,而不是第二个「*/」
|
编译器遇到上述代码片段时,忽略第一个 「/*」与第一个「*/」之前的内容。
因此,「这里已经不在注释中 */」被当作代码编译。当然这出现编译错误。
IDE的语法高亮功能,帮助我们快速发现这类问题,注释与其它代码有不同的颜色,很容易区分。
注释使用原则
注释帮助第一次阅读代码的人理解程序逻辑。可能有人会说“我自己的代码,只有自己用,不用写注释”。
但是可能不用几天,就会忘掉自己当时的思路,这时再看自己的代码,就如同第一次阅读别人的代码。
使用注释,有三个原则。
- 在程序,库或函数前,使用注释描述代码的用途。
1
2
3
|
// 本程序用来计算班级中学生成绩的排名
// 本函数使用牛顿法来求数据的平方根
|
通过注释,使用代码的人不必阅读代码,就知道对应代码实现的功能。
大大提高代码复用效率,尤其在多人协作编程时。
- 在库或函数里,描述代码如何实现所需功能。
1
2
3
4
5
6
7
8
9
|
/* 为得到期末成绩
将期中成绩,作业及考试成绩
按比率求和 */
// 从一堆号码中随机抽一个
// 1. 将所有的号码放到一个数组中
// 2. 生成一个随机数
// 3. 计算出这个随机数对应的数组的位置
// 4. 返回数组中对应的元素
|
上面注释,能快速了解代码实现功能,不用看每一行代码。
- 语句层面,描述为什么代码这么写。
注释不必描述代码行为。就如同下面的例子。
坏注释:
1
2
|
// 将score的值设置为0
score = 0;
|
原因:不看注释,也知道语句的行为
好注释:
1
2
|
// 每一局比赛开始时,分数清零
score = 0;
|
原因:知道为什么score设置为0
注释代码
调试或调整代码时,有时会让一行或多行代码不编译。
这时,把这些代码放到注释里。
例如,原始程序是这样:
1
2
3
|
std::cout << 1;
std::cout << 2;
std::cout << 3;
|
使用如下注释,这几行代码不会被编译:
1
2
3
4
5
6
7
8
9
|
// std::cout << 1;
// std::cout << 2;
// std::cout << 3;
/*
* std::cout << 1;
* std::cout << 2;
* std::cout << 3;
*/
|
注
后续章节,介绍使用预处理指令「#if 0」能达到同样目的。