1.#if 0
......
#endif
既然后面条件都为假,为什么不干脆注释掉呢?是不是为了以后好扩充?
2.#ifndef _LANG_
#define _LANG_(放在头文件的最上面)
但在后面却没有用到_LANG_这个宏,不知道这个预编译有什么用?

解决方案 »

  1.   

    2.#ifndef _LANG_
    #define _LANG_(放在头文件的最上面)这个是在多次include用一个h文件的时候,避免多次编译这个h文件的内容,因为多次编译会导致符号的重定义。
      

  2.   

    wuxuan(真心英雄) :
    在其它文件中也没用到,整个项目中都没用到,而且这种定义不止一处,有很多处这种定义的宏都没用到。
      

  3.   

    stonespace(stonespace) :但这个宏在项目中根本没有用到。
      

  4.   

    stonespace(stonespace) :加了这条预编译,就可以让整个h文件不被再次编译吗?
      

  5.   

    我想说明一下这样做   #ifndef /#ifdef条件编译比注释方便的多,同时它能够提供和维护一个软件的多个指定版本。
      

  6.   

    为了扩展与移植的方便还有就是stonespace(stonespace)说的
      

  7.   

    头文件使用ifndef/define/endif 预处理块是用来防止该文件被重复引用
      

  8.   

    如果include两次,变成这样:#ifndef _LANG_
    #define _LANG_class A
    {
    };#endif#ifndef _LANG_
    #define _LANG_class A
    {
    };#endifinclude第二次的时候,_LANG_已经定义了,所以#ifndef不成立,所以就不会再编译了,也避免了class A定义两次的问题。定义_LANG_的唯一目的是为了防止多次编译,不会用到的,你可以看vc自动生成的h文件,这个宏的名字都很长,就是为了避免你用到这个名字。
      

  9.   

    stonespace(stonespace) 已经讲的很清楚了
      

  10.   

    回答 :
    1。比如说你写了不一大堆代码,后来用户改变了要求,你怎么办?是用/* */封起来呢还是用// // //封起来?如果是用/* */封的话这段代码里面也有/* */怎么办?如果用// // //封,代码有N多行,不是太累吗?直接删掉?以后要用怎么办?
      所以 #if 0   
              #endif 
    的作用相当于注释掉这段代码,告诉编译器不要编译这段代码。
    2。 stonespace(stonespace)已经说的很清楚了。