我依稀记得一条规则“C 标准库的头文件不得包含 C 标准库的任何其他头文件,除非特别允许”。但奇怪的是,我在 C11 中找不到这样的规则。我本来希望它出现在 7.1.2“标准标题”中。
- C中有这样的规则吗?
- POSIX中有这样的规则吗?
- 其他标准中是否有这样的规则?
最佳答案
搜索从 Ansi-C (C90) 到最新草案的 C 标准,并进一步浏览历史引用资料,例如 Unix V7 手册和 K&R 书籍,我找不到该规则的引用资料。
标准头文件的内容、位置和实现是特定于实现的,一些类型和宏定义在多个头文件中,因此需要一个一致的方案来避免重新定义警告,并且在常见的 C 库实现中通过条件包含来实现。
某些系统 header 被明确指定为包括其他 header :
7.25 Type-generic math
<tgmath.h>
The header
<tgmath.h>
includes the headers<math.h>
and<complex.h>
and defines several type-generic macros.
7.26 Threads
<threads.h>
7.26.1 Introduction
The header<threads.h>
includes the header<time.h>
, defines macros, and declares types, enumeration constants, and functions that support multiple threads of execution.
一些标准 POSIX header 也被记录为包括其他系统 header 。
除非程序员正在实现 C 库,否则该规则不会有任何区别:记录为定义标准类型、枚举常量、宏、函数或变量的系统头文件应在使用此标识符之前包含。系统 header 可以按任意顺序包含,多次包含应该不会造成任何问题。
关于c - C 标准库中的头文件可以包含另一个头文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65868752/