- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
引言:
我们经常在 c 工程中发现,源文件中要包含自己的头文件。一直以来,都不知道为什么
这样做。现在,我知道了。
以前的认知:
我认为,.c 文件没有必要包含自己的.h 文件。.h 文件包含.c 文件中定义的函数和全局变
量的声明,.h 文件就是.c 文件提供的对外接口文件。既然.h 文件就是.c 文件提供的对外接口
文件,那么.c 文件就没必要包含自己的.h 文件了(.h 文件是对外提供用的,对内又何必再包
含进来呢)。
鉴于这样的理解,我对于工程中.c 源文件包含自己的.h 头文件很是不理解,不知道为什
么要这样做。
现在对此的理解:
但是现在,我知道为什么要源文件包含自己的头文件了。
如下,一段书中的原话:
“如果希望让编译器检查声明的一致性, 一定要把全局声明放到头文件中。特别是, 永
远不要把外部函数的原型(也就是函数声明)放到.c 文件中: 通常它与定义的一致性不能得
到检查, 而矛盾的原型(也就是函数声明)比不用还糟糕。”
注意:外部函数的原型,就是外部函数的声明。
对这段话的理解:
为什么:“永远不要把外部函数的原型放到.c 文件中”
这个外部函数 A 指的是 B.c 文件之外定义的函数,B.c 文件中需要使用外部函数 A,就
需要先对外部函数 A 声明(对外部函数的声明就是外部函数原型)。对这个外部函数 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 函数的定义和声明不
是在同一个文件中的。定义和声明不在同一个文件中,编译的时候,编译器就不能对定义和
声明的一致性进行检查。这样,如果 sum 的定义和声明不一致,编译器就无法检查出来(定
义和声明不在同一个文件中),那么编译的时候不会报错,但是程序运行的时候就可能会出
错。而这样的错误,查找起来又不是很容易。
鉴于此,才这样说:“永远不要把外部函数的原型放到.c 文件中”。
那如何才能让编译器检查定义和声明的一致性呢?
前面说,如果把外部函数的原型放到.c 文件中,编译器就无法检查声明和定义的一致
性(声明和定义不在同一个文件中)。那么,要让编译器检查定义和声明的一致性呢,自然
是把定义和声明放在同一个文件中,而如何实现把定义和声明放在同一个文件里呢?
答案:源文件定义的函数,在源文件对应的头文件中声明,然后源文件包含自己的头文
件。这样定义和声明就放在同一个文件里了。
援引上述例子: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 的定义
和声
您可能关注的文档
- CADASIL的影像学表现_窦克非.pdf
- CBCT+和曲面断层在下颌后牙区种植中的应用价值分析.pdf
- Carto系统标测和指导射频消融快速心律失常_杨平珍.pdf
- CE-可用性工程评估报告(EN 62366).doc
- CES 现场:手机被颠覆之后,三星打算通过智能家居发起反击.pdf
- CFG桩在赣州西站软基处理工程中的应用_刘忠厚.pdf
- CF introduce.ppt
- CF手游免费刷枪攻略 免费枪支获取方法.docx
- CFG桩复合地基施工技术研究与应用_黄才福.pdf
- Chap4 药物的含量测定方法.ppt
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)