首页 >后端开发 >C++ >为什么在 C 中使用 `` 时,`printf` 在 `std::printf` 和 `printf` 中都可以工作?

为什么在 C 中使用 `` 时,`printf` 在 `std::printf` 和 `printf` 中都可以工作?

Barbara Streisand
Barbara Streisand原创
2024-10-26 05:43:30612浏览

Why does `printf` work in both `std::printf` and `printf` when using `` in C  ?

cstdio Stdio.h 命名空间

的 C 参考文档中,它声称所有库元素都驻留在 std 中命名空间。然而,实验表明 std::printf 和 printf 函数调用都可以工作。这是否表明 C 头文件将符号名称导入到 std 和全局命名空间中?

答案

包括 将符号名称导入 std 命名空间,也可能导入全局命名空间。相反,包括 将符号名称导入到全局命名空间中,也可能将它们合并到 std 命名空间中。

此行为扩展到所有 C 样式标头。根据 C 11 标准(附录 D),C 标准库头文件的行为如下:

"2 每个 C 头文件,每个头文件都有一个 name.h 形式的名称,其行为就好像每个名称都放置在在标准库命名空间中,相应的 cname 头被放置在全局命名空间范围内。”

因此,仍然不确定这些名称是否最初在命名空间 std 中声明或定义,然后通过注入到全局命名空间中using-声明,反之亦然。

以上是为什么在 C 中使用 `` 时,`printf` 在 `std::printf` 和 `printf` 中都可以工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

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