Обнаружение -mconsole и -mwindows при компиляции

Возможно, это простой или глупый вопрос, но я не могу найти ответа: можно ли проверить во время компиляции, вызывается ли GCC в Windows с параметром -mwindows или -mconsole? Я хотел бы направить вывод на стандартный вывод или в окно сообщения, в зависимости от этого параметра, например:

#ifdef CONSOLE_BUILD
printf ("Привет, на стандартный вывод");
#elifdef GUI_BUILD
MessageBoxW (NULL, L "Привет в графическом интерфейсе", NULL, MB_OK);
#endif


person Martin Sander    schedule 03.06.2018    source источник
comment
Судя по этой публикации, есть разница в символе __subsystem__, стоит проверить.   -  person orhtej2    schedule 03.06.2018
comment
Судя по этому ответу -mconsole, результат __subsystem__ будет 3, а -mwindows - 2.   -  person orhtej2    schedule 03.06.2018


Ответы (1)


-mconsole и -mwindows влияют только на компоновщик, но не на компилятор. Вы можете использовать файл спецификаций GCC для добавления -DCONSOLE_BUILD всякий раз, когда указан -mconsole, но по сути это будет пользовательская модификация GCC.

В качестве альтернативы, похоже, существуют различные способы выяснить, связано ли окно консоли с процессом, например _ 5_ функция (но я не программист Windows).

person Florian Weimer    schedule 03.06.2018
comment
Способ с GetConsoleWindow работает! И, конечно, направление вывода во время выполнения даже предпочтительнее, чем во время компиляции. - person Martin Sander; 04.06.2018
comment
@MartinSander, пожалуйста, примите ответ, если он отвечает на ваш вопрос. - person orhtej2; 04.06.2018