注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。
测试环境:Ubuntu 10.10
GCC版本:4.4.5
一、注释的第一印象
对话
- 学生:
老师,我觉得注释没有必要深究,因为很简单,对程序功能也没有影响。
- 老师:
注释是C语言最重要的工具,我们先看自己有没有能力驾驭它,在讨论有没有必要深究。
二、似是而非的问题
下面的注释是正确的吗?
int main()
{
int/*...*/i;
char* s = "abcdefg //ijkmn";
//Is it a\
valid comment?
in/**/tj;
return 0;
}
实例分析
初探注释规则
12-1.c
#include <stdio.h>
int main()
{
int/*...*/i; //true
char* s = "abcdefgh //hijklmn"; //true
//Is it a \ //true
valid comment?
in/*...*/t i; //error
return 0;
}
知识点:
“\”是接续:表示下一行内容和这一行内容相同。
三、注释规则
1)编译器在编译过程中使用空格替换整个注释
2)字符串字面量中的//和/*...*/不代表注释符号
3)/*...*/型注释不能被嵌套
四、有趣的问题
1)你觉得y = x/*p是什么意思?
作者本意:把x除以*p的结果赋值给y。
编译器:将/*作为一段注释的开始,把/*后的内容都当成注释内容,直到*/出现为止。
在编译器看来,注释和其它程序元素是平等的。因此,作为工程师不能轻视注释。
五、教科书型注释
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;
}
注释用于阐述原因和意图而不是描述程序的运行过程!
六、迷惑型的注释
int main()
{
init();
//...
//...
sad = 0x723; //R.I.P.V.B.
//...
//...
finalize();
return 0;
}
写注释不是晒心情,必须无二义性,起到对代码进行提示的作用,避免使用缩写!
七、忽悠性注释
int main()
{
//...
//...
//Bob 07/24/1995
/*我知道这个问题很难解决而且
*现在必须依赖于这个contains函数
*但我以后会用一种更直观优雅有意义的方式
*重写这段代码
*现在这么做只是由于时间紧迫,但我一定会解决。
*/
if( contains(s,"error"))
{
exit(1);
}
//...
//...
return 0;
}
注释是对代码的提示,避免臃肿和喧宾夺主。
小结
1)注释应该准确易懂,防止二义性,错误的注释有害无利
2)注释是对代码的提示,避免臃肿和喧宾夺主
3)一目了然的代码避免加注释
4)不要用缩写来注释代码,这样可能会产生误解
5)注释用于阐述原因和意图而不是描述程序的运行过程