注释符号

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)注释用于阐述原因和意图,而不是描述程序的运行过程。

posted on 2018-04-13 10:44  arabain  阅读(321)  评论(0)    收藏  举报

导航