首页 > 解决方案 > 调用 C 标准库函数的标准 C++ 方式

问题描述

我有几个关于在 C++ 中调用 C 标准库函数的问题:

  1. 如果我想调用getline()其中声明的<stdio.h>内容,是否总是足以包含<cstdio>?这适用于我正在使用的编译器,我看到它包含在内<stdio.h><cstdio>但我想知道标准是否保证这一点。
  2. 是否保证所有 C 标准库函数都可以在 C++ 中使用?通过getline()上面的示例,我注意到在它下面的cppreference<cstdio>上没有列出getline()
  3. std::对于在命名空间中可用的 C 标准库函数和类型,FILE或者malloc()它们通过全局命名空间访问它们是否有任何问题,或者将它们作为std::FILE或访问它们是否更惯用std::malloc()

标签: c++c++11c++-standard-library

解决方案


您应该始终包含文档告诉您的内容。(通常会编写 C++ 标准库实现,以便可以通过其他包含访问函数,但当然依赖这意味着您的代码不可移植。)请注意,C 中没有标准 getline函数。但 C++ 中有一个:

std::getline()

在 header 中定义<string>。通常,C++ 标准不保证 C 函数在全局范围内可用,甚至是 C++ 标准库的一部分。这两种语言在多年前就开始了分歧,因此 C++ 在某种意义上是 C 的超集(包括库)的想法是一个神话。

参考:https ://en.cppreference.com/w/cpp/string/basic_string/getline


推荐阅读