cstdio stdio.h 命名空间
cstdio 的 C 参考声明“库的每个元素都在 std 命名空间内定义”。但是,您发现 std::printf 和 printf 都可以工作,这就提出了 C 头文件是否在两个命名空间中都包含符号的问题。
答案更加微妙。
包括 cstdio
包括 cstdio 将符号导入 std 命名空间,并可能导入全局命名空间。这是因为 cstdio 包含 stdio.h,这是一个 C 风格标头。
包含 stdio.h
包含 stdio.h 将符号导入全局命名空间,并且可能进入 std 命名空间。这是因为 stdio.h 是 C 风格标头。
兼容性功能
在 C 中使用 C 风格标头是一个兼容性功能。 C 11 标准规定,为了与 C 标准库兼容,C 标准库提供了 25 个 C 头文件,包括 cstdio 和 stdio.h。
该标准进一步指出,每个 C 头文件“行为就像每个名称通过相应的 cname 标头放置在标准库命名空间中的就是放置在全局命名空间范围内的。”
结论
综上所述,当在 C 中包含 C 样式标头时,符号可以导入到 std 和全局命名空间中,具体取决于所使用的特定标头和编译器的实现。但是,并不总是保证两个命名空间都包含相同的符号。
以上是为什么在 C 中包含'cstdio”时,'printf”可以在没有'std::”的情况下工作?的详细内容。更多信息请关注PHP中文网其他相关文章!