黑马程序员技术交流社区

标题: 关于文件包含的问题 [打印本页]

作者: D调的沉默    时间: 2014-4-25 10:56
标题: 关于文件包含的问题
本帖最后由 D调的沉默 于 2014-5-4 11:38 编辑

做博客时遇到文件包含的问题,想问下如果a。h包含b。h,b。h又包含a。h这样造成循环,为造成什么的后果,只知道不能这么做,但是为什么不能这么做,和这么做的后果时什么不知道,求明白的大神解释
作者: 悟中生有    时间: 2014-4-25 12:42
我是这样理解的:这样会引起死循环的,会报错的。也就是a复制b,b复制a,就不知道到底该谁复制谁了?希望能帮到你。
作者: Freedam    时间: 2014-4-26 00:43
举例说明吧
one.h文件如下:
  1. #include <two.h>

  2. void test();
复制代码


two.h文件如下:
  1. #include <one.h>

  2. void test2();
复制代码

包含头文件就是将头文件的内容原模原样地拷贝过来,那one.h文件拷贝之后如下:
  1. #include <one.h>
  2. void test2();

  3. void test();
复制代码
变成这样之后再进行拷贝:
  1. #include <one.h>
  2. void test2();
  3. void test();

  4. void test2();
  5. void test();
复制代码
one.h又把自己拷贝了一遍,这样一次一次地拷贝自己形成了死循环。
反之先拷贝two.h文件也是一样都是拷贝自己的死循环。




作者: gaoxinglei123    时间: 2014-4-26 07:53
无限循环下去。a.h把b.h内容包含进去以后又要处理b里面的include,又把a包含进去。再包含b然后a然后b再a不会结束
作者: NenKeer    时间: 2014-4-28 21:54
为了避免重复包含,头文件中要有宏定义和条件编译的代码
  1. #ifndef ABC                    //如果没有宏定义ABC的话 编译一下代码
  2. #define ABC                   //宏定义ABC
  3. int sum(int n1,int n2);    //该头文件所包含的一些函数声明
  4. #endif                           
复制代码


因为包含一次之后 就有了ABC的宏定义,第二次包含处理的时候,就不会在包含了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2