你可能会好奇为什么我们使用尖括号内为iostream,和双引号添加。H。答案是角括号是用来告诉编译器,我们包括头文件,包括编译器。双引号告诉编译器,这是头文件,我们提供,这使它在当前目录中包含源代码首先寻找那个头文件。

规则:使用尖括号内包含的头文件来编译。使用双引号包含其他头文件。

另一个常见的问题是“为什么不都有扩展。H?“。答案是,因为iostream。H比iostream头文件是不同的!解释需要一个很短的历史教训。

当C + +是第一个被创造出来,所有的文件在标准运行库结束。H。生活是一致的,它是好的。cout和cin的原始版本住在iostream。当语言是标准的ANSI委员会,他们决定把所有的功能在运行库在命名空间std中(通常是一个好主意)。然而,这提出了一个问题:如果他们把所有的功能在std命名空间中,旧的程序没有任何更多的工作!

为了解决这个问题,因为旧的程序提供向后兼容性,一套新的头文件使用相同的名字了,但缺乏H延伸。这些新的头文件都有它们的功能在命名空间std内。这样,旧的程序,包括#包括< iosteam。h>不需要重写,和新的程序可以#包含iostream > <。

确保当你包含一个头文件从标准库,你使用非H版如果它存在。否则你将使用过时的版本的头,不再支持。

作为一个方面说明,标准库中的很多标题没有非。H版,只有H版。这些文件,这是罚款包括H版。许多图书馆都向后兼容标准的C语言编程,C不支持命名空间。因此,这些图书馆的功能将不在命名空间std中访问。另外,当你写你自己的头文件,它们都有一个。H的扩展,因为你不会把你的代码在std命名空间。

规则:使用非。如果它存在一个图书馆的h版本,并通过命名空间std中访问功能。如果非。H版本不存在,或你创造你自己的头,用H版

头文件的最佳实践

这里是一些最好的方法创建你自己的头文件。

总是包含头文件保护。

不在头文件中声明的变量,除非他们是常数。头文件应该只用于声明。

没有定义的功能在头文件中,除非他们平凡的。这样做可以使你的头文件的人难读。

每个头文件应该有一个具体的工作,并尽可能的独立。例如,你可以把你所有的声明在细菌和所有你的声明的功能,相关功能的B在本文相关的如果你只在乎以后,你可以只包括细菌并没有得到任何的东西相关的B

尝试包括一些其他头文件可能在您的头文件。