C++中的头文件

 当我第一次学习用 C 编程时,头文件对我是神秘的。许多有关 C语言的书似乎不强调它,
并且编译器也并不强调函数声明,所以它在大部分时间内似乎是可要可不要的,除非要声明结
构时。在 C++ 中,头文件的使用变得非常清楚。它们对于每个程序开发是强制的,在它们中
放入非常特殊的信息:声明。头文件告诉编译器在我们的库中哪些是可用的。因为对于 C P P
文件能够不要源代码而使用库(只需要对象文件或库文件),所以头文件是存放接口规范的唯
一地方。
        头文件是库的开发者与它的用户之间的合同。它说:“这里描述的是库能做什么。”它不说
如何做,因为如何做存放在C P P文件中,开发者不需要分发这些描述“如何做”的源代码给用
户。
       该合同描述数据结构,并说明函数调用的参数和返回值。用户需要这些信息来开发应用程
序,编译器需要它们来产生相应的代码。
         编译器强迫执行这一合同,也就是要求所有的结构和函数在它们使用之前被声明,当它们
是成员函数时,在它们被定义之前被声明。这样,就强制把声明放在头文件中并把这个头文件
包含在定义成员函数的文件和使用它们的文件中。因为描述库的单个头文件被包括在整个系统
中,所以编译器能保证一致和避免错误。
为了恰当地组织代码和写有效的头文件,有一些问题必须知道。第一个问题是将什么放进
头文件中。基本规则是“只声明”,也就是说,对于编译器只需要一些信息以产生代码或创建
变量分配内存。这是因为,在一个项目中,头文件也许会包含在几个处理单元中,而如果内存
分配不止一个地方,则连接器会产生多重定义错误。
        这个规则不是非常严格的。如果在头文件中定义“静态文件”的一段数据(只在文件内可
视),在这个项目中将有这个数据的多个实例,编译器不会报错。基本上,不要在头文件中做
在连接时会引起混淆的任何事情。
       关于头文件的第二个问题是重复声明。 C 和 C++ 都允许对函数重复声明,只要这些重复
声明匹配,但决不允许对结构重复声明。在 C++ 中,这个规则特别重要,因为,如果编译器
允许对结构重复声明而且这两个重复声明又不一样,那么应当使用哪一个呢?
       重复声明问题在 C++ 中很少出现,因为每个数据类型(带有函数的结构)一般有自己的
头文件。但我们如果希望创建使用某个数据类型的另一个数据类型,必须在另一个头文件中包
含它的头文件。在整个项目中,很可能有几个文件包含同一个头文件。在编译期间,编译器会
几次看到同一个头文件。除非做适当的处理,否则编译器将认为是结构重复声明。
典型的防止方法是使用预处理器隔离这个头文件。如果有一个头文件名为 F O O . H,一般
用“名字分解”产生预处理名,以防止多次包含这个头文件。FOO.H 的内部可以如下:
#ifndef FOO_H_
#define FOO_H_
// Rest of header here ...
#endif // FOO_H_
注意:不用前导下划线,因为标准 C 用前导下划线指明保留标识符。
在项目中使用头文件
用 C++ 建立项目时,我们通常要汇集大量不同的类型(带有相关函数的数据结构)。一般
将每个类型或一组相关类型放在一个单独的头文件中,然后在一个处理单元中定义这个类型的
函数。当使用这个类型时必须包含这个头文件,形成适当的声明。
有时这个模式会在本书中使用,但如果例子很小,结构声明、函数定义和 main( ) 函数可
以出现在同一个文件中。应当记住,在实际上使用的是隔离的文件和头文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值