关于带单字母扩展名的C ++头文件有什么特别之处?

时间:2014-03-28 00:52:16

标签: c++ include c-preprocessor

C ++标准在第16.2节“源文件包含”中包含以下规则。它使单字符文件扩展特殊。

  

实现应为由一个或多个 nondigits 数字(2.11)组成的序列提供唯一映射,后跟一个句点(.)和一个非数字。第一个字符不应是数字。实现可能会忽略字母大小写的区别。

这些文件名有什么特殊处理方法?头文件包含的上下文中的映射是什么,为什么它是唯一的?

1 个答案:

答案 0 :(得分:4)

据说,在环形交叉口标准方式中,"abyssinia.h"等头文件应映射到文件系统中的唯一文件名,即使基础文件系统不支持9.1文件名 - 想到具有8.3限制的旧式DOS,或者对于文件名最多具有14个字符的最旧版本的Unix。系统必须确保将这些名称唯一地映射到不同的文件。

它还说实现可能会忽略大小写(这也意味着它可能不会忽略大小写)。如果忽略大小写,则"ABYSSINIA.H""abyssinia.h"将映射到同一文件;如果它不忽略大小写,那么它们将是两个单独的文件。请注意,Windows和Mac OS X都具有保留大小写但不区分大小写的文件系统,至少在默认情况下是这样。

我不确定为什么存在单个非数字限制;它可能意味着.hpp扩展名无法保证映射到唯一名称。

这是对实施的所有限制;它主要不会影响你作为程序员(除非你是程序员编写实现 - 意味着C ++编译器的实现),除非你应该确保你的头名称是唯一的,无论大小写,并且最大可移植性,您的标题名称应该以{{1​​}}或其他一些单字母扩展名结束。