当包含不同的头时,C实现是否可以隐式地包含标准头?

当包含不同的头时,C实现是否可以隐式地包含标准头?,c,header,c99,C,Header,C99,读书的时候我在想 #include <stdio.h> int main(void) { int bool = 0; return bool == 0; } #包括 内部主(空){ int bool=0; 返回bool==0; } 这个程序严格符合要求吗?换句话说,stdio.h是否允许包含stdbool.h?这是由规范指定的吗?C标准标题不能包括其他标题。这与C++不同,在这里它是明确允许的。 C99标准,第7.1.3节 每个标头声明或定义其关联子项[…]中列出的所有

读书的时候我在想

#include <stdio.h>

int main(void) {
  int bool = 0;
  return bool == 0;
}
#包括
内部主(空){
int bool=0;
返回bool==0;
}

这个程序严格符合要求吗?换句话说,
stdio.h
是否允许包含
stdbool.h
?这是由规范指定的吗?

C标准标题不能包括其他标题。这与C++不同,在这里它是明确允许的。 C99标准,第7.1.3节

每个标头声明或定义其关联子项[…]中列出的所有标识符 没有保留其他标识符


我不确定它是否具有权威性,但下面是它的说明(当然是针对c89的)

标准C库提供了15个标准头。标题 有几个属性

它们是相互独立的。没有标准标题要求这样做 为使其正常工作,应首先包括另一个标准收割台。 任何标准标题也不包括另一个标准标题

我在c99或c89中找不到这方面的任何提及

编辑

我可以看到
inttypes.h
包括
stdint.h

7.8-1

标题
包括标题
并对其进行扩展 通过托管实现提供的附加功能


虽然我相信你,你能给我们一些参考资料吗(例如,K&R)?嗯,如果一个标题包含另一个标题,那么我的程序实际上包含两个标题。那么两个头的标识符似乎都被保留了。或者,由于没有明确的规则允许,这样包含另一个头是非法的?@Johannes-据我所知,某种头只能包含指定的名称和通常保留的名称(即[…])。如果要定义
bool
,应该包括。否则它只是
\u Bool
,您可以像在示例中一样使用Bool。