cstdio 和 stdio.h 命名空间冲突
C 标准库包含 cstdio 标头,它是 std 命名空间的组成部分。然而,遇到混合 stdio.h 和 std 版本标头的代码并不罕见。
std 命名空间中的 cstdio
参考文献指出每个元素C 标准库的内容位于 std 命名空间内。因此,像 printf 和 scanf 这样的函数是 std 命名空间的一部分,应该作为 std::printf() 和 std::scanf() 来调用。
std 命名空间中的 stdio.h?
stdio.h 的情况更加微妙。根据 C 11 标准,包含 cstdio 将符号名称导入到 std 命名空间中,而包含 stdio.h 将它们导入到全局命名空间中。对于其他 C 样式标头也是如此。
命名空间合并行为
但是,有一个警告。该标准指定由 C 标头放置在 std 命名空间中的名称的行为也与放置在全局命名空间中一样。这意味着像 printf 和 scanf 这样的符号虽然主要定义在 std 命名空间中,但也可以在没有 std:: 前缀的情况下使用。
实际含义
实践,这意味着同时使用 stdio.h 和 std::cstdio 的代码应在 std::cstdio 标头之前包含 stdio.h 标头。这确保了符号在全局命名空间中声明和定义,允许在没有 std:: 前缀的情况下使用它们。
结论
虽然推荐使用 std 命名空间访问 C 标准库函数的方法,仍然可以使用旧的 C 头文件。但是,重要的是要了解命名空间的影响,以避免潜在的问题。
以上是以下是一些基于问题的标题,重点关注核心冲突: 直接、清晰: * C 命名空间冲突:std::cstdio 与 stdio.h - 使用哪一个? * C 中的 stdio.h :可以混合 Glo 吗的详细内容。更多信息请关注PHP中文网其他相关文章!