C源文件要包含自己的头文件.docx

C源文件要包含自己的头文件.docx

ID:62037241

大小:17.56 KB

页数:3页

时间:2021-04-15

C源文件要包含自己的头文件.docx_第1页
C源文件要包含自己的头文件.docx_第2页
C源文件要包含自己的头文件.docx_第3页
资源描述:

《C源文件要包含自己的头文件.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、引言:我们经常在c工程中发现,源文件中要包含自己的头文件。一直以来,都不知道为什么这样做。现在,我知道了。以前的认知:我认为,.c文件没有必要包含自己的.h文件。.h文件包含.c文件中定义的函数和全局变量的声明,.h文件就是.c文件提供的对外接口文件。既然.h文件就是.c文件提供的对外接口文件,那么.c文件就没必要包含自己的.h文件了(.h文件是对外提供用的,对内又何必再包含进来呢)。鉴于这样的理解,我对于工程中.c源文件包含自己的.h头文件很是不理解,不知道为什么要这样做。现在对此的理解:但是现在,我知

2、道为什么要源文件包含自己的头文件了。如下,一段书中的原话:“如果希望让编译器检查声明的一致性,一定要把全局声明放到头文件中。特别是,永远不要把外部函数的原型(也就是函数声明)放到.c文件中:通常它与定义的一致性不能得到检查,而矛盾的原型(也就是函数声明)比不用还糟糕。”注意:外部函数的原型,就是外部函数的声明。对这段话的理解:为什么:“永远不要把外部函数的原型放到.c文件中”这个外部函数A指的是B.c文件之外定义的函数,B.c文件中需要使用外部函数A,就需要先对外部函数A声明(对外部函数的声明就是外部函数

3、原型)。对这个外部函数A的声明,不能放在B.c文件里面来实现。以实例说明:①假若工程中有2个源文件a.c和b.c;a.c的头文件为a.h,b.c的头文件为b.h。②a.c中定义了一个函数sum。③b.c要引用sum这个函数。做法是:在b.c中声明sum这个函数。然后b.c就可以使用sum函数了。这样的做法就是把外部函数sum的声明放到了b.c中来。然而,这样的做法很不妥。不妥的原因:sum是在a.c中定义的,而声明确是在b.c中,sum函数的定义和声明不是在同一个文件中的。定义和声明不在同一个文件中,编译

4、的时候,编译器就不能对定义和声明的一致性进行检查。这样,如果sum的定义和声明不一致,编译器就无法检查出来(定义和声明不在同一个文件中),那么编译的时候不会报错,但是程序运行的时候就可能会出错。而这样的错误,查找起来又不是很容易。鉴于此,才这样说:“永远不要把外部函数的原型放到.c文件中”。那如何才能让编译器检查定义和声明的一致性呢?前面说,如果把外部函数的原型放到.c文件中,编译器就无法检查声明和定义的一致性(声明和定义不在同一个文件中)。那么,要让编译器检查定义和声明的一致性呢,自然是把定义和声明放在

5、同一个文件中,而如何实现把定义和声明放在同一个文件里呢?答案:源文件定义的函数,在源文件对应的头文件中声明,然后源文件包含自己的头文件。这样定义和声明就放在同一个文件里了。援引上述例子:a.c中定义了函数sum,而函数本质上是外部的,函数sum是可以被其它源文件调用的。那么,我们把sum函数的声明放在a.h中。然后a.c源文件还要包含自己的头文件,也就是a.h文件。而b.c文件要引用sum函数,就直接包含a.h文件就可以。sum函数的定义在a.c中,声明是在a.h中,但是由于a.c包含了a.h,所以sum

6、的定义和声明就是在同一个文件a.c中了。这样,编译器编译的时候,就能对sum函数定义和声明的一致性做检查,如果不一致,就会报错。至于其他源文件引用这个外部函数sum,不再采用直接声明的方式,而是通过包含a.h头文件的方式。这样,编译器检查了sum函数定义和声明的一致性没有报错,也就表明a.c中sum函数的定义和a.h中sum函数的声明是一致的。那么其他源文件都是通过直接包含a.h,来使用函数sum,就也保证了sum函数声明和定义的一致性了。结论c源文件要包含自己的头文件,目的就是让编译器检查定义和声明的一

7、致性。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。