C语言中头文件包含的意义

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言中头文件包含的意义

在C/C++中,经常会在一个文件中包含其它文件。例如:

#include

还有一个概念。两个文件,分别为A和B。B中定义了一个变量var,A包含B,在A中就可以访问变量var。我经常将包含文件,与访问权限混淆。之前我一直以为只有包含了文件,才可以访问文件下面的变量。其实不是。我将概念逐个梳理一遍,就会明白它们的区别了。

首先:文件包含的意思是什么呢?例如文件A包含文件B,意思是A将文件B的所有内容拷贝过来,放到A的前面,与文件A的其它内容一起,作为文件A。一句话,就是合并两个文件。文件包含其实就简单的拷贝。如果还有一个文件叫C,文件B包含文件C,文件A 也包含文件C。这个时候,C在A中就会有两份拷贝。这没有问题,只是内容重复而已。但是会导致空间的浪费,以及时间的浪费。所以,很多时候,都会在头文件中使用下面的预定义语句来避免文件的重复拷贝。

#ifndef _HEADER_FILEA_

#define _HEADER_FILEA_

//头文件的代码

....

#endif。

其次:有一种变量叫做全局变量,在函数外面声明或者定义的变量都是全局变量。不管是什么文件,也不管在文件的什么位置声明或者定义,只要是在函数外面,并且非const变量,就是全局变量。全局变量的意思是:整个程序都可以访问它。不需要包含该变量所在的文件。既然在整个程序中都可以访问全局变量,那么为什么我们还要包含头文件呢?因为在C++中,只有变量声明或者定义之后,才可以访问一个变量。我们可以在使用变量之前的位置声明变量,不需要包含变量所在的文件,就可以访问变量了(当然,这个变量指的是全局变量)。但是,当一个文件A中声明了很多变量的时候,而文件B又要访问A中很多变量,就要在B中声明所有需要访问的变量。这样会非常麻烦。所以,我们通常都是包含文件,而不是一个个的声明。但是包含文件,又会出现问题。

在介绍这个问题之前,我再说一个概念。变量可以多次声明,但是不能重复定义,变量在整个程序中只能定义一次。现在回归到问题。举例,两个文件,一个A,一个B,A包含B。前面说过了文件包含的意义,是简单地拷贝所有的内容,即将文件合并。

如果在B中定义了变量int iFirst =10; A包含B,那么A中也会有这个定义语句。iFirst在A和B中都定义了,即重复定义。这违反了变量不能重复定义的原则。怎么办?我们想包含整个文件,不用一个一个地声明变量,可是包含整个文件,又会出现重复定义的问题。所以,高手发明了一种东西叫做头文件。在头文件中,仅仅声明所有变量,但是不定义它们。将变量的定义放到一个实现文件里面。为了统一,头文件以.h作为后缀名,实现文件以.c或者.cpp作为后缀名。将变量的声明放到头文件.h中,将变量的定义放到.c或者.cpp文件中。这样就可以完美地解决这个矛盾了。既包含文件,又不会出现重复定义的问题。说到这里,我们又有疑问了。我们只包含头文件A.h,但是变量都定义在A.cpp文件中,我们怎么可以访问那些变量啊?说了这么多,又忘记了文章刚开始说的全局变量的意思了。这里再次强调:

全局变量的意思是:整个程序都可以访问它,不需要包含该变量所在的文件。所以我们虽然只包含A.h,但是还是可以访问在A.cpp文件中定义的全局变量。

正因为如此,我们平时看到很多这样的唠叨和劝告。

在.h头文件中,只声明变量,而不定义变量。

听到这种唠叨,我们现在终于明白了。也明白为什么是.h文件,而不是.cpp文件。其实都可以,只是一种统一而已,方便大家阅读和理解,也就是通常所说的规范了

相关文档
最新文档