gpt4 book ai didi

c - C 标准库中的头文件可以包含另一个头文件吗?

转载 作者:行者123 更新时间:2023-12-04 00:51:41 26 4
gpt4 key购买 nike

我依稀记得一条规则“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com