Что такое stdout в контексте C++?

«Что такое stdout в контексте C++?» — вопрос из категории Linux и ОС, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В C++ stdout — это стандартный поток вывода, определенный в языке C и доступный через заголовок <cstdio>. Это глобальный объект типа FILE*, который по умолчанию связан с консолью (терминалом).

Основные способы работы с stdout в C++:

  1. Использование C-стиля (наследие):

    #include <cstdio>
    int main() {
        printf("Hello via printfn");          // Неявный вывод в stdout
        fprintf(stdout, "Explicit to stdoutn"); // Явное указание
        return 0;
    }
  2. Использование C++-потоков (предпочтительно): В C++ основным интерфейсом для стандартного вывода является объект std::cout (объявленный в <iostream>), который направляет данные в тот же самый поток stdout.

    #include <iostream>
    int main() {
        std::cout << "Hello via std::cout" << std::endl;
        return 0;
    }

Ключевые особенности stdout:

  • Буферизация: По умолчанию построчно буферизирован. Вызов fflush(stdout) или использование std::endl сбрасывает буфер.
  • Перенаправление: Поток можно перенаправить на уровне ОС, например, в файл: ./my_program > output.txt. Код программы при этом не меняется.
  • Связь с другими потоками: Наряду с stdout существуют stdin (стандартный ввод) и stderr (стандартный вывод ошибок).