c++ - 具有单字母扩展名的 C++ 头文件有什么特别之处?

标签 c++ include c-preprocessor

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/

相关文章:

c++ - c++中从右边读取流

c++ - 为什么协程的返回类型必须是可移动构造的?

c++ - #includes 的顺序以避免链接错误

c++ - 使用预处理器定义在一组类型之间进行选择

c++ - 使用 Boost Program 选项读取相对文件路径

c++ - 智能指针、typedef 和前向声明

c++ - CMake 链接 Windows SDK

c++ - g++ makefile,包含错误,没有那个文件或目录

c++ - C++ 宏中的语句

c - 如何缩短条件 "0"前缀的宏