网站大量收购独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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 的定义 和声

您可能关注的文档

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档