A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© D调的沉默 中级黑马   /  2014-4-25 10:56  /  1151 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 D调的沉默 于 2014-5-4 11:38 编辑

做博客时遇到文件包含的问题,想问下如果a。h包含b。h,b。h又包含a。h这样造成循环,为造成什么的后果,只知道不能这么做,但是为什么不能这么做,和这么做的后果时什么不知道,求明白的大神解释

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

4 个回复

倒序浏览
我是这样理解的:这样会引起死循环的,会报错的。也就是a复制b,b复制a,就不知道到底该谁复制谁了?希望能帮到你。
回复 使用道具 举报
举例说明吧
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文件也是一样都是拷贝自己的死循环。



评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
gaoxinglei123 来自手机 中级黑马 2014-4-26 07:53:56
板凳
无限循环下去。a.h把b.h内容包含进去以后又要处理b里面的include,又把a包含进去。再包含b然后a然后b再a不会结束
回复 使用道具 举报
为了避免重复包含,头文件中要有宏定义和条件编译的代码
  1. #ifndef ABC                    //如果没有宏定义ABC的话 编译一下代码
  2. #define ABC                   //宏定义ABC
  3. int sum(int n1,int n2);    //该头文件所包含的一些函数声明
  4. #endif                           
复制代码


因为包含一次之后 就有了ABC的宏定义,第二次包含处理的时候,就不会在包含了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马