首页  >  文章  >  后端开发  >  为什么在 C 中包含“cstdio”时,“printf”可以在没有“std::”的情况下工作?

为什么在 C 中包含“cstdio”时,“printf”可以在没有“std::”的情况下工作?

DDD
DDD原创
2024-10-26 01:13:02627浏览

 Why Does `printf` Work Without `std::` in C   When `cstdio` is Included?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn