• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++中的头文件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
      当我第一次学习用 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人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# url 路径转换 相对路径 转换为 绝对路径发布时间:2022-07-13
下一篇:
c#WebApi之解决跨域问题:Cors发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap