我尝试使用谷歌搜索,但我在不同的地方得到了不同的答案。我想知道一个人应该使用下列之一的情况:
#include <stdio>
#include <cstdio>
#include <iostream>
我无法弄清楚区别,因为在我的情况下,如果我可以互换地使用这些程序,那么我的所有C ++程序似乎都能正常工作。话虽这么说,iostream似乎通过定义cin和cout等来支持输入和输出流。但是,我可能错了。我将非常感谢有关这些参考C ++标准的使用的答案/可靠的引用。我想知道使用其中一个是否有任何性能上的好处。
答案 0 :(得分:2)
<stdio>
未在我所知的任何标准中定义。<stdio.h>
是包含printf()
和scanf()
等函数的c标头。<stdio.h>
包含在c ++标准中,但已弃用。<cstdio>
是包含printf()
和scanf()
等内容的c ++标题。<iostream>
是一个c ++标题,其中包含std::cout
,std::cerr
和std::cin
等内容。答案 1 :(得分: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);
除了<iostream>
之外,比(需要<iomanip>
)更容易编写:
std::cout << "item " << std::setw(4) << std::setfill('0') << index
<< "has a value of " << std::setprecision(6) << value << "\n";
但是,使用第一个时需要更加小心。例如,以下行不会产生编译错误(但正如提到的那样,编译时可能会收到警告),但会导致运行时问题:
printf("I wonder what will happen? %d\n");
我不认为它们的性能有很大差异,因为大多数流“魔法”都发生在编译时,它们应该产生类似的结果。我不是百分百肯定的,如果我错了,请纠正我。
答案 2 :(得分:0)
没有stdio(stdio.h和cstdio)。标题名称中的'c'和缺少的'.h'表示它是C头的C ++版本。
某些编译器(包括MSVC)在其他stl头文件中包含stl头文件,这会导致您观察到的效果。这不是便携式的!
如果您关注性能:使用C ++变体和check this