1.3 关于注释
在程序变得更复杂前,我们应该明白C++如何处理注释(commenmts)。注释可以帮助阅读程序,通常用于概括算法、确认变量的用途或者阐明难以理解的代码段。注释并不会增加可执行程序的大小,编译器会忽略所有注释。
C++中有两种类型的注释:单行注释和成对注释。单行注释以双斜线(//)开头,行中处于双斜杠右边的内容是注释,被编译器忽略。
另一种定界符,注释对(/**/),是从C语言继承过来的。这种注释以“/*”开头,以“*/”结尾,编译器把落入注释对“/**/”之间的内容作为注释:
#include <iostream>
/* Simple main function: Read two numbers and write their sum */
int main()
{
// prompt user to enter two numbers
std::cout << "Enter two numbers:" << std::endl;
int v1, v2; // uninitialized
std::cin >> v1 >> v2; // read input
return 0;
}
任何允许有制表符、空格或换行符的地方都允许放注释对。注释对可跨越程序的多行,但不是一定要如此。当注释跨越多行时,最好能直观地指明每一行都是注释的一部分。我们的风格是在注释的每一行以星号开始,指明整个范围是多行注释的一部分。
程序通常混用两种注释形式。注释对一般用于多行解释,而双斜线注释则常用于半行或单行的标记。
太多的注释混入程序代码可能会使代码难以理解,通常最好是将一个注释块放在所解释代码的上方。
代码改变时,注释应与代码保持一致。程序员即使知道系统其他形式的文档已经过期,还是会信任注释,认为它会是正确的。错误的注释比没有注释更糟,因为它会误导后来者。
注释对不可嵌套
注释总是以/*开始并以*/结束。这意味着,一个注释对不能出现在另一个注释对中。由注释对嵌套导致的编译器错误信息容易使人迷惑。例如,在你的系统上编译下面的程序:
#include <iostream>
/*
* comment pairs /* */ cannot nest.
* "cannot nest" is considered source code,
* as is the rest of the program
*/
int main()
{
return 0;
}
当注释掉程序的一大部分时,似乎最简单的办法就是在要临时忽略的区域前后放一个注释对。问题是如果那段代码已经有了注释对,那么新插入的注释对将提前终止。临时忽略一段代码更好的方法是,用编辑器在要忽略的每一行代码前面插入单行注释。这样,你就无需担心要注释的代码是否已包含注释对。
习题
习题1.7 编译有不正确嵌套注释的程序。
习题1.8 指出下列输出语句哪些(如果有)是合法的。
std::cout << "/*";
std::cout << "*/";
std::cout << /* "*/" */;
预测结果,然后编译包含上述三条语句的程序,检查你的答案。纠正所遇到的错误。





