头文件包含头文件,一个头文件可以包含另一头文件吗

1,一个头文件可以包含另一头文件吗这是个风格问题, 因此有不少的争论 。很多人认为“嵌套包含文件”应该避免:盛名远播的“印第安山风格指南”(Indian Hill Style Guide) 对此嗤之以鼻; 它让相关定义更难找到; 如果一个文件被包含了两次,它会导致重复定义错误; 同时他会令 makefile 的人工维护十分困难 。另一方面,它使模块化使用头文件成为一种可能 (一个头文件可以包含它所需要的一切, 而不是让每个源文件都包含需要的头文件); 类似 grep 的工具 (或 tags 文件) 使搜索定义十分容易 ,  无论它在哪里; 一种流行的头文件定义技巧是:#ifndef HFILENAME_USED#define HFILENAME_USED... 头文件内容 ...#endif每一个头文件都使用了一个独一无二的宏名 。这令头文件可自识别 , 以便可以安全的多次包含; 而自动 Makefile 维护工具 (无论如何, 在大型项目中都是必不可少的) 可以很容易的处理嵌套包含文件的依赖问题 。
2,什么叫包含头文件有些头文件重复包含只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是c规范允许的)如果头文件被循环包含的话,那就看你的编译器了有的会智能处理 , 和只include一次一样有的会报错有的干脆死锁,导致编译程序崩溃(这个 只有很低级的编译器才会出 现在几乎看不到了)不管怎样,用ifnde xxx #define xxx或者其他方式避免头文件重复包含,只有好处 没有坏处是一个很好的习惯#include "xxxx.h"这是一条预编译指令 , 实际的效果就是在这一行的地方,把那个xxxx.h的文件读进来,填补在这个位置,和你自己复制粘贴的效果完全一样 , 但是显然比复制粘贴方便、可读也可靠得多 。现在的编译器都支持输出预编译结果,对应VC++里面就是编译选项中,“预处理”下的“预处理到文件”,打开对应的.cpp文件 , 就可以看到把所有的预编译指令都处理过之后的效果 。根据实际使用的需要,也分为#include "xxx.h"和#include 两种,前一种优先搜索工程的包含目录(一般就是源文件目录) , 后一种优先搜索系统的包含目录 , 这样有重名时可以区分 。包含头文件的左右是可以减少代码量,按照C和C++的标准 , 调用函数和类之前要先声明,比如要用printf , 就必须要类似这样声明:int printf(char *format, ...);很麻烦而且容易记错 。所以先把这样的函数声明写进一个头文件中间,然后需要使用的时候只需要#include 就可以用了 。所以头文件实际是一种代码重用的工具 。包含头文件, 就是用 #include 把 这个 C/C++ 程序所需要的 .h 文件 (要编译器把它)嵌入 进来 。例如你在程序开始写:#include #include #include #include 编译器 编译时 会 把它们 嵌入 进来 。上述4个是常用的头文件 。头文件是包含了一大堆函数的一个文件 , 头文件有系统自带的,也可以是自己写的 。包含头文件 是一条预处理指令,它的处理过程是:通过预处理器读入源代码 , 根据预处理指令对源程序进行修改 , 然后再交给编译器 。在你自己写程序的过程中,有好多的函数都是经常用到的 。你就可以把它们写到一个头文件里 , 当你需要乃至这个函数的时候你就不必要把这个函数重新声明一次 , 直接在源代码前包含这个头文件就可以直接在代码中调用了 。方便吧 。我是这样理解的 。#include说一下我在初学编程(C/C++)时遇到的困难吧,当时也对头文件的意义不是很明确,不过 , 后来有了一些自己的理解,也不一定完全正确……以头文件 为例,首先,头文件里的内容是一些函数的声明 , 像里就包含了一些基本的输入输出函数,然后,当在一个程序的开头包含一个头文件的时候 , 就可以直接使用其中说明过的函数了(以上这两步有点像C语言代码文件里的先声明一个函数,之后才能调用一样;只不过头文件是声明了一系列的函数)最后,就像在代码文件里声明的函数需要在后面编写具体的函数执行代码一样,头文件里包含的函数也是有自己的执行代码的 , 只是这些代码已经被写在编译器里了,所以用户直接调用即可,不再需要自己编写代码(这里当然不包括自定义的头文件)…………【头文件包含头文件,一个头文件可以包含另一头文件吗】

    推荐阅读