C++ 标准在第 16.2 节“源文件包含”中包含以下规则。它以某种方式使单字 rune 件扩展名变得特殊。
The implementation shall provide unique mappings for sequences consisting of one or more nondigits or digits (2.11) followed by a period (
.
) and a single nondigit. The first character shall not be a digit. The implementation may ignore distinctions of alphabetical case.
这些文件名得到什么特殊处理?头文件包含上下文中的映射是什么?如果它是唯一的,为什么重要?
最佳答案
这是说,以迂回的标准方式,头文件如 "abyssinia.h"
应映射到文件系统中的唯一文件名,即使底层文件系统没有不支持 9.1 文件名 — 想想具有 8.3 限制的旧式 DOS,或者文件名最多 14 个字符的最旧版本的 Unix。系统必须确保这些名称唯一映射到不同的文件。
它还说实现可能会忽略大小写(这也意味着它可能不会忽略大小写)。如果确实忽略大小写,那么 "ABYSSINIA.H"
和 "abyssinia.h"
将映射到同一个文件;如果不忽略大小写,那么它们将是两个单独的文件。请注意,Windows 和 Mac OS X 都有保留大小写但不区分大小写的文件系统,至少在默认情况下是这样。
我不确定为什么存在单个非数字限制;这大概意味着 .hpp
扩展名不能保证映射到唯一的名称。
这都是对实现的约束;它主要不会影响您作为程序员(除非您是编写实现的程序员——意味着 C++ 编译器的实现),除了您可能应该确保您的 header 名称无论大小写都是唯一的,并且为了最大的可移植性,您的 header 名称应以 .h
或其他一些单字母扩展名结尾。
关于c++ - 具有单字母扩展名的 C++ 头文件有什么特别之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22702219/