C ++标准在第16.2节“源文件包含”中包含以下规则。它使单字符文件扩展特殊。
实现应为由一个或多个 nondigits 或数字(2.11)组成的序列提供唯一映射,后跟一个句点(
.
)和一个非数字。第一个字符不应是数字。实现可能会忽略字母大小写的区别。
这些文件名有什么特殊处理方法?头文件包含的上下文中的映射是什么,为什么它是唯一的?
答案 0 :(得分:4)
据说,在环形交叉口标准方式中,"abyssinia.h"
等头文件应映射到文件系统中的唯一文件名,即使基础文件系统不支持9.1文件名 - 想到具有8.3限制的旧式DOS,或者对于文件名最多具有14个字符的最旧版本的Unix。系统必须确保将这些名称唯一地映射到不同的文件。
它还说实现可能会忽略大小写(这也意味着它可能不会忽略大小写)。如果忽略大小写,则"ABYSSINIA.H"
和"abyssinia.h"
将映射到同一文件;如果它不忽略大小写,那么它们将是两个单独的文件。请注意,Windows和Mac OS X都具有保留大小写但不区分大小写的文件系统,至少在默认情况下是这样。
我不确定为什么存在单个非数字限制;它可能意味着.hpp
扩展名无法保证映射到唯一名称。
这是对实施的所有限制;它主要不会影响你作为程序员(除非你是程序员编写实现 - 意味着C ++编译器的实现),除非你应该确保你的头名称是唯一的,无论大小写,并且最大可移植性,您的标题名称应该以{{1}}或其他一些单字母扩展名结束。