2

我试着用谷歌搜索,但我在不同的地方得到不同的答案。我想知道应该使用以下其中一种的情况:

#include <stdio>
#include <cstdio>
#include <iostream>

我无法弄清楚其中的区别,因为在我的情况下,如果我可以互换使用它们,我的所有 C++ 程序似乎都可以工作。话虽如此,iostream 似乎通过定义 cin 和 cout 等来支持输入和输出流。但是,我可能错了。对于这些参考 C++ 标准的使用,我将不胜感激答案/可信引用。我想知道使用其中一个是否有任何性能优势。

4

3 回答 3

1

非标准标题

  • <stdio>在我所知道的任何标准中都没有定义。

C 的标准化标头

  • <stdio.h>是包含函数的 c 头文件printf()scanf()

C++ 的标准化头文件

  • <stdio.h>包含在 c++ 标准中,但已弃用。
  • <cstdio>是 C++ 标头,其中包含printf()和之类的内容scanf()
  • <iostream>是一个 C++ 头文件,其中包括std::cout,std::cerrstd::cin.
于 2014-09-03T14:03:16.610 回答
1

stdio用于 C 中的标准 IO。.h最后应该有一个。在 C++ 中,所有 C 头文件都封装在cxxxxxx头文件中(不带.h)。所以,<stdio.h>是一样的<cstudio>。这些为简单的 IO提供函数,如printf和。scanf

iostream另一方面,它是一个用于 C++ 的 IO 库,并提供像cin和之类的流cout,正如您所提到的。

根据您的应用程序,您可以在大多数情况下互换使用它们。显然,语法会有所不同。

使用 C 函数可以更轻松地格式化文本。例如:

printf("item %04d has a value of %+.6e\n", index, value);

比(<iomanip>除了需要<iostream>)更容易编写:

std::cout << "item " << std::setw(4) << std::setfill('0') << index
          << "has a value of " << std::setprecision(6) << value << "\n";

但是,使用第一个时需要更加小心。例如,以下行不会产生编译错误(但正如 sharth 所提到的,编译时您可能会收到警告)但会导致运行时问题:

printf("I wonder what will happen? %d\n");

我认为它们的性能没有太大差异,因为大多数流“魔术”发生在编译时,它们应该产生相似的结果。不过,我不是 100% 确定,如果我错了,请纠正我。

于 2014-09-03T14:09:23.280 回答
0

没有标准输入输出(stdio.h 和 cstdio)。标头名称中的“c”和缺少的“.h”表明它是 C 标头的 C++ 版本。

检查cstdioiostream(参考)

一些编译器(包括 MSVC)在其他 stl 头文件中包含 stl 头文件,这会导致您观察到的效果。虽然这不是便携式的!

如果您关心性能:使用 C++ 变体并检查此

于 2014-09-03T13:56:58.690 回答