在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
并且编译器也并不强调函数声明,所以它在大部分时间内似乎是可要可不要的,除非要声明结 构时。在 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( ) 函数可 以出现在同一个文件中。应当记住,在实际上使用的是隔离的文件和头文件。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论