【发布时间】:2021-04-28 07:30:43
【问题描述】:
我依稀记得一条规则,“C 标准库的标头不得包含 C 标准库的任何其他标头,除非特别允许”。但奇怪的是,我在 C11 中找不到这样的规则。我本来希望它出现在 7.1.2“标准标题”中。
- C 中有这样的规则吗?
- POSIX 中有这样的规则吗?
- 其他标准中是否有这样的规则?
【问题讨论】:
-
我不认为这可以作为一个规则应用,而是作为一个建议,但是是的,很多论文都提到了这一点:即:规则#7。每个头文件 A.h 都应该 #include 所有其他 A.h 需要正确编译的头文件,但仅此而已。 A.h 中需要什么:如果另一个结构类型 X 用作结构类型 A 的成员变量,那么您必须在 A.h 中 #includeX.h 以便编译器知道 X 成员有多大。不要包含只有 .c 文件代码需要的头文件。 – #将其包含在 .c 文件中,而不是 .h 文件中。
-
我个人从来没有理解过这个规则,标准头包括其他标准库头。
-
@DavidRanieri,你引用的风格推荐——我订阅了——似乎不是 OP 所要求的,而是它的双重性。
标签: c include language-lawyer c-standard-library