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

引言:  

我们经常在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源文件要包含自己的头文件,目的就是让编译器检查定义和声明的一致性。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值