旧的c注释语法在c++里还可以用,c++新发明的行尾注释语法也有其过人之处。例如下面这种情形:
1 2 3 4 5 |
if ( a > b ) { ???? // int temp = a;??? // swap a and b ???? // a = b; ???? // b = temp; } |
假设你出于某种原因要注释掉这个代码块。从软件工程的角度看,写这段代码的程序员也做得很好,他最初的代码里也写了一个注释,以解释代码在做什么。用c++形式的句法来注释掉这个程序块时,嵌在里面的最初的注释不受影响,但如果选择c风格的注释就会发生严重的错误:
1 2 3 4 5 6 |
if ( a > b ) { ???? /*??? int temp = a;? /* swap a and b */ ???????? a = b; ???????? b = temp; ???? */ } |
请注意嵌在代码块里的注释是怎么无意间使本来想注释掉整个代码块的注释提前结束的。
c风格的注释当然还有它存在的价值。例如,它们在c和c++编译器都要处理的头文件中是无法替代的。尽管如此,只要有可能,你最好尽量用c++风格的注释。
值得指出的是,有些老的专门为c写的预处理程序不知道处理c++风格的注释,所以象下面这种情形时,事情就不会象预想的那样:
1 |
#define light_speedp 3e8??? // m/sec (in a vacuum) |
对于不熟悉c++的预处理程序来说,行尾的注释竟然成为了宏的一部分!所以无论如何也不会用预处理来定义常量的。