首页 > 后端开发 > C++ > 正文

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

DDD
发布: 2024-10-26 01:13:02
原创
626 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!