C++标准库头可以包含C标准头吗?

xsk*_*xzr 14 c c++ c++-standard-library

我只能在标准草案N4582中找到

[res.on.headers/1] C++标头可能包含其他C++标头.

似乎没有指定C++标头是否可以包含C标准标头.

如果允许,即使不包含此标头,使用C标准头中定义的全局名称是否不安全(因为程序可能通过某些C++标准头隐式包含头)?

Rei*_*ica 5

对于您跟进的问题(名称冲突),是的,它当然可以。原因是 C++ 标准库包含<c:::>C 标准库内容的C++ 标头,并且标准明确允许这些标头也提供全局命名空间中的名称(除了在 中强制提供它们::std)。

此外,基于 C++ 标准的 Annex D [depr],C 标准库头文件(<:::.h>版本)也是 C++ 标准库的一部分(尽管已弃用)。这意味着 [res.on.headers]/1 允许 C++ 头文件包含它们。