#cpp #функции #visual_cpp
Почему при точке входа WinMain/wWinMain не запускается консоль. А при точке входа main - запускается. Как это работает? И как компилятор понимает, что WinMain/wWinMain является точкой входа, если стандартной является main. Как работать с точкой входа main без запуска консоли, используя заголовочный файл windows.h? Ещё хотелось бы спросить, где можно найти про это структурированную информацию (почитать про это, как это работает).
Ответы
Ответ 1
как компилятор понимает что WinMain/wWinMain является точкой входа, если стандартной является main Стандарт лишь определяет, что компилятор обязан поддерживать использование точки входа с прототипом int main(int argc, char **argv). Стандарт не запрещает поддерживать любые другие точки входа. В случае Visual C++, точка входа определяется параметрами компоновщика /SUBSYSTEM и /ENTRY. Когда параметр /SUBSYSTEM имеет значение "WINDOWS", а параметр /ENTRY не определен, точкой входа является функция WinMain. Как работать с точкой входа main без запуска консоли Установив параметры компоновщика /ENTRY:"mainCRTStartup" /SUBSYSTEM:WINDOWS. В диалоговом окне свойств проекта эти параметры расположены в "Linker - Advanced - Entry point" и "Linker - System - Subsystem" соответственно. Подробное описание принципов выбора точки входа можно прочитать здесь: точка входа в win32 приложенииОтвет 2
Понимает не компилятор, а линковщик. Когда он выполняет линковку для той или иного формата файла - консоли, оконного приложения или чего еще - он прилинковывает некий объектный файл с кодом стартапа, который выполняет инициализацию всяких вещей, как-то разбор кормандной строки и всякое другое, а потом, выполнив подготовку среды выполнения, вызывает ту самую "главную" функцию. Которая может иметь разное имя для разных проектов. WinMain - это просто соглашение, ничего мистически-сакрального в этом имени нет.
Комментариев нет:
Отправить комментарий