主题:[原创]<C++ Primer>翻译-chapter 1-1.3
1.3 关于注释
在我们编写出更复杂的程序之前,我们应该先了解一下怎样注释C++程序。注释使我们的程序更适于阅读。程序的注释有多种形式,通常包括程序所使用算法的概述,对程序之所以定义某个变量而给输出的说明,对一段看似含糊的代码所给出的详细说明。注释部分的多少不会影响到可执行程序的大小,编译器在编译的时候会忽略掉程序的所有注释。
NOTE:为了使注释部分与程序代码更容易区别,本书所有程序中所用注释文字字体均为斜体。在实际编程过程中,编程环境可能提供不同的方法来达到上述目的。
在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;
}
这种成对的标记可以放在程序的任何地方,标记之间被注释掉的部分可以包括一些格式控制符,如制表(tab),空格,换行符。这样注释部分可以跨越很多行,但应该显示的标明其中的每一行都是注释的一部分,我们的方法是在注释内容的每一行前都加一个星号“*”。
一般来说程序都混合使用两种方法来进行注释。使用成对标记由于可以跨行,所以可书写更多的注释内容,更适于对于若干行程序代码进行解释说明。而使用双斜线的行注释方法则被用于对一行代码的注释。
太多地注释内容使整个程序地代码看起来有点混乱。经常使用的的方法是把注释放在所要解释代码地上方。
如果对程序源代码做了修改,那么同时也应该更新对应的注释部分。尽管很多系统文档(也是一种程序代码的说明)是出了名的没有实效性,但程序员还是应该保证注释部分的时效性,也可以说是保证了注释的准确性,这样的注释才更有意义。程序源文件存在不准确的注释比没有注释的情况还要糟,这样会误导后来的阅读者。
不允许嵌套
使用/* 和 */的成对注释标记是不允许嵌套的,就是说在他们之间不能在插入同样的成对标记(/* 和 */)。如果这样做不但可能无法编译,而且得到的编译错误信息也是文不对题,使程序员找不到真正的错误。试编译下面的程序,看看会发生什么结果。
#include <iostream>
/*
* comment pairs /* */ cannot nest.
* "cannot nest" is considered source code,
* as is the rest of the program
*/
int main()
{
return 0;
}
使用成对注释标记,我们可以很方便的临时注释掉一段程序代码。但如果这段代码已经包含了一对注释标记(/*和*/),那么随之而来的问题使发生了嵌套,使新增加的注释内容过早的结束。解决这个问题的最好的方法是,在临时注释掉的代码每一行的前面加上行注释标记(//),这样做以后,你就不必在意代码中是否有成对的注释标记。
在我们编写出更复杂的程序之前,我们应该先了解一下怎样注释C++程序。注释使我们的程序更适于阅读。程序的注释有多种形式,通常包括程序所使用算法的概述,对程序之所以定义某个变量而给输出的说明,对一段看似含糊的代码所给出的详细说明。注释部分的多少不会影响到可执行程序的大小,编译器在编译的时候会忽略掉程序的所有注释。
NOTE:为了使注释部分与程序代码更容易区别,本书所有程序中所用注释文字字体均为斜体。在实际编程过程中,编程环境可能提供不同的方法来达到上述目的。
在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;
}
这种成对的标记可以放在程序的任何地方,标记之间被注释掉的部分可以包括一些格式控制符,如制表(tab),空格,换行符。这样注释部分可以跨越很多行,但应该显示的标明其中的每一行都是注释的一部分,我们的方法是在注释内容的每一行前都加一个星号“*”。
一般来说程序都混合使用两种方法来进行注释。使用成对标记由于可以跨行,所以可书写更多的注释内容,更适于对于若干行程序代码进行解释说明。而使用双斜线的行注释方法则被用于对一行代码的注释。
太多地注释内容使整个程序地代码看起来有点混乱。经常使用的的方法是把注释放在所要解释代码地上方。
如果对程序源代码做了修改,那么同时也应该更新对应的注释部分。尽管很多系统文档(也是一种程序代码的说明)是出了名的没有实效性,但程序员还是应该保证注释部分的时效性,也可以说是保证了注释的准确性,这样的注释才更有意义。程序源文件存在不准确的注释比没有注释的情况还要糟,这样会误导后来的阅读者。
不允许嵌套
使用/* 和 */的成对注释标记是不允许嵌套的,就是说在他们之间不能在插入同样的成对标记(/* 和 */)。如果这样做不但可能无法编译,而且得到的编译错误信息也是文不对题,使程序员找不到真正的错误。试编译下面的程序,看看会发生什么结果。
#include <iostream>
/*
* comment pairs /* */ cannot nest.
* "cannot nest" is considered source code,
* as is the rest of the program
*/
int main()
{
return 0;
}
使用成对注释标记,我们可以很方便的临时注释掉一段程序代码。但如果这段代码已经包含了一对注释标记(/*和*/),那么随之而来的问题使发生了嵌套,使新增加的注释内容过早的结束。解决这个问题的最好的方法是,在临时注释掉的代码每一行的前面加上行注释标记(//),这样做以后,你就不必在意代码中是否有成对的注释标记。