В Windows программы обычно создаются как SUBSYSTEM: приложение WINDOWS или как SUBSYSTEM: CONSOLE .
Программы, созданные с помощью SUBSYSTEM: CONSOLE, должны быть приложениями в текстовом режиме. Для этого типа приложений stdout и stderr выводят на консоль, с которой вы их запустили, создавая новую консоль при необходимости.
Напротив, приложения SUBSYSTEM: WINDOWS не работают с консолью. Вы все еще можете писать в stdout и stderr, но они обычно никуда не уходят. Вы можете использовать AllocConsole для создания консоли для печати, но это всегда будет печатать во вновь созданное окно консоли, а не в окно консоли, из которой вы запустили программу.
Один прием для SUBSYSTEM: приложений WINDOWS заключается в том, что даже при отсутствии консоли вы все равно можете pipe stdout и stderr. Для передачи в стандартный поток вы можете сделать:
YourApplication.exe > output.txt
или если у вас есть cat
(или эквивалент):
YourApplication.exe | cat
Также обратите внимание, что на самом деле нет никакой разницы между приложениями SUBSYSTEM: WINDOWS и SUBSYSTEM: CONSOLE, кроме того, как Windows обрабатывает их при создании процесса. (Вы можете создавать окна в приложениях SUBSYSTEM: CONSOLE.) Поэтому вы можете легко переключаться между типами SUBSYSTEM (например, для использования SUBSYSTEM: CONSOLE для отладочных сборок и SUBSYSTEM: WINDOWS для выпусков).