Я попытался погуглить это, но я получаю разные ответы в разных местах. Я хочу знать случаи, когда нужно использовать одно из следующего:
#include <stdio>
#include <cstdio>
#include <iostream>
Я не могу понять разницу, так как в моем случае все мои программы на C ++, кажется, работают, если я использую их взаимозаменяемо. При этом, похоже, iostream поддерживает поток ввода и вывода, определяя cin, cout и т. Д. Однако я могу ошибаться. Я был бы признателен за ответы / заслуживающие доверия цитаты для использования их со ссылкой на стандарты C ++. Интересно, есть ли какие-либо преимущества в производительности, связанные с использованием одного над другим?
<stdio>
не определено ни в одном из стандартов, которые я знаю.<stdio.h>
это заголовок c, содержащий такие функции, как printf()
а также scanf()
,<stdio.h>
включен в стандарт c ++, но не рекомендуется.<cstdio>
это заголовок C ++, который включает в себя такие вещи, как printf()
а также scanf()
,<iostream>
это заголовок C ++, который включает в себя такие вещи, как std::cout
, std::cerr
а также std::cin
,stdio
для стандартного ввода-вывода в C. Он должен иметь .h
в конце. В C ++ все заголовки C были заключены в cxxxxxx
заголовки (без .h
). Так, <stdio.h>
такой же как <cstudio>
. Эти функции предлагают, как printf
а также scanf
, для простого ввода-вывода.
iostream
с другой стороны, библиотека ввода-вывода для C ++, и предлагает такие потоки, как 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";
Тем не менее, вы должны быть более осторожными при использовании первого. Например, следующая строка не приведет к ошибке компиляции (но, как упоминалось выше, вы можете получить предупреждения при компиляции), но вызовет проблемы во время выполнения:
printf("I wonder what will happen? %d\n");
Я не думаю, что есть большая разница в их производительности, так как большая часть «волшебства» потока происходит во время компиляции, и они должны давать схожие результаты. Я не уверен на 100%, поэтому поправьте меня, если я ошибаюсь.
нет stdio (stdio.h и cstdio). «c» и отсутствующий «.h» в названии заголовка указывают, что это версия C ++ заголовка C.
проверять cstdio а также iostream (Рекомендации)
некоторые компиляторы (включая MSVC) включают заголовки stl в другие заголовки stl, что приводит к наблюдаемому эффекту. это не портативный хотя!
если вы заинтересованы в производительности: используйте варианты C ++ и Проверь это