可以避免重定义,如在A.H 和B.H都INCLUDE C.H的话,如果没有上面的语句则会出错。

解决方案 »

  1.   

    谢谢你的解答!
    但是,我写了如下的代码:
    a.h内容如下:
       #include "c.h"
       void a();
    b.h内容如下:
       #include "c.h"
       void b();
    c.h内容如下:
       void c();
    a.cpp内容如下:
       #include "stdafx.h"
       #include "a.h"
       void a()
       {
    TRACE("a\n");
       } 
    b.cpp内容如下:
       #include "stdafx.h"
       #include "b.h"
       void b()
       {
    TRACE("b\n");
       }
    c.cpp内容如下:
       #include "stdafx.h"
       #include "c.h"
       void c()
       {
    TRACE("c\n");
       }以上内容在APPWIZARD所建立的缺省单文档程序中顺利通过编译(VC++6.0),请解释为什么?谢谢!
      

  2.   

    以上程序我在头文件并没有写那个"#IFNDEF...."代码,为什么没有出现你所说的问题?
      

  3.   

    你找低版本的TC编译试试,这会不会是VC有这个功能呢
      

  4.   

    //a.cpp
    #include  "stdafx.h"
    void  c();
    void  a();
    void  a()
    {
        TRACE("a\n");
    }  
    //b.cpp
    #include  "stdafx.h"
    void  c();
    void  b();
    void  b()
    {
        TRACE("b\n");
    }//c.cpp
    #include  "stdafx.h"
    void  c();
    void  c()
    {
        TRACE("c\n");
    }翻译之后就是这样的,我没有看出有什么重复定义来???我个人认为
    #ifndef  XXXXXXXX_h_
    #define  XXXXXXXX_h_
    唯一的好处就是尽量的加快编译速度
    比如c.h如果是这样:
    1. ---------------------------------------
    void c();
    void c();
    没有问题2. --------------------------------
    int cc;
    void c();
    没有问题(但若:
    a.h
    #include "c.h"b.h
    #include "c.h"
    #include "a.h"b.cpp编译的时候就会同时include两遍c.h,这是会报编译错误,因为有相同名字的两个全局变量int i, 这里是编译错误在上面假设的这种情况下,改变c.h为如下 
    #ifdef C_H
    #define C_H
    int i;
    #endif编译错误消失了,但是会有三个连接错误,因为a.cpp,b.cpp,c.cpp各自定义了同一个叫int i的全局变量,它们不能同时存在于一个链接好的可执行程序里面(所以#ifdef能防止编译时的重定义,但是不能防止链接时的重定义)
    这里我们可以看出加了#ifdef头的b.h在编译时,由于c.h会被include两次,但是c.h有#ifdef定义,所以#ifdef和#endif直接的东西只被compiler编译一次(比如语法分析比较耗时间)大家一起来讨论 (最后把分结给我,哈哈)
      

  5.   

    没有说清楚第2种情况2.  --------------------------------
      int  cc;
      void  c();
      虽然没有编译问题,但是链接有重复定义的问题(但若:
      

  6.   

    如果在文件 a.h 中有 #include "b.h",又有 #include "c.h"
    而 b.h 中已经有了 #include "c.h",则会产生重复包含头文件的错误:
    b.h中打开了c.h,而
    a.h中再次打开c.h则产生了这样的错误
    如果用 c.h 中有 #define C_H
    则用 #ifndef C_H 就可以判断出 c.h 是否已经被包含
    如果已经被包含则不需要 #include "c.h",否则就需要