注释符号
C语言中的符号

1. 似是而非的问题
(1)下面的注释是正确的吗?
【实例分析】初探注释规则
#include<stdio.h>
int main()
{
int/**/i; //合法int i;
char* s = "abcdefg //ijklmn"; //合法引号内的双斜杠
//Is it a \
valid comment? //合法,上一行以“\”换行。
in/**/t j; //不合法,in t j;
return 0;
}
2. 注释规则
(1)编译器在编译过程删除注释,但是不是简单的删除而是使用空格替换整个注释
(2)编译器认为双引号括起来内容都是字符串,字符串字面量中的//和/*…*/不代表注释符号
(3)/*…*/型注释不能被嵌套
3. 有趣的问题
(1)你觉得 y=x/*p是什么意思?
作者本意:把x除以*p的结果赋值给y
编译器:根据贪婪原则,编译器将/*作为一段注释的开始,把/*后的内容都当成注释内容,直到*/为止。
改正: y=x / *p,即在/的两侧各加一个空格,以防止/与*结合,编译器误认为注释开始
启示:在编译器看来,注释和其它程序元素是平等的。因此,作为工程师,不能轻视注释
4. 失败的注释
(1)教科书型注释
int main()
{
r = n / 2; //r是n的一半
while ((r - n / r) <= t) //循环,仅当r - n/r 不大于t
{
}
r = r + n * t; //对变量r进行赋值
n++; //变量n自增1
return 0;
}
▲注释用于阐述原因和意图而不是描述程序的运行过程!
(2)迷惑型的注释
int main()
{
init();
//......
//......
sad = 0x723; //R.I.P.L.V.B.
//......
//......
finalize();
return 0;
}
本例中,0x723相当于10进制的1827,为纪念贝多芬。Rest In Peace. Ludwig Van Beethoven.(路德维希·凡·贝多芬安息吧!)
▲写注释不是晒心情,必须无二义性,起到对代码进行提示的作用。避免使用缩写。
(3)忽悠型注释
int main()
{
//......
//......
//Bob 07/24/1995
/*我知道这个问题很难解决而且现在必须依赖于这个contains函数
*但我以后会用一种更加直观优雅有意义的方式重写这段代码。
*现在这么做只是由于时间紧近,但我一定会解决的。
*/
if (contains(s, "error"))
{
exit(1);
}
//......
//......
return 0;
}
▲注释是对代码的提示,避免臃肿和喧宾夺主。如本例if语句才3行,注释用了5行。
(4)搞笑型注释
佛祖是佛学专业的大师,但是没学过编程,因此保佑不了你,你只能靠自己避开bug。
5. 小结
(1)注释应该准确易懂,防止二义性,错误的注释有害无利
(2)注释是对代码的提示,避免臃肿和喧宾夺主。
(3)一目了然的代码避免加注释
(4)不要用缩写来注释代码,这样可能会产生误解
(5)注释用于阐述原因和意图,而不是描述程序的运行过程。
浙公网安备 33010602011771号