Говоря о инструментарии, Microsoft, обычно, Win32 графических приложения всегда начало с WinMain
, в то время как main
используется для консоли приложений.
Разница между двумя типами приложений фактически сводится (в основном) к одному параметру в исполняемом файле и не находится в возможности - приложение GUI может создавать консоль, а консольное приложение может создавать окно - но в поведении загрузчика: для exe, помеченного как GUI, загрузчик не будет выделять какую-либо консоль, тогда как консоль exe будет прикрепляться к консоли родителя или создавать новую, если ее нет.
Для названия точки входа все это просто вопрос компоновщика/CRT по умолчанию: «реальная» точка входа исполняемого файла представляет собой просто смещение в конечном исполняемом файле, которое указывает на функцию, которая не принимает никаких параметров. Это CRT, который делает свой материал, определяет параметры, а затем называет «вашу» точку входа, поэтому в принципе они оба могут работать точно так же.
Дело в том, что имя/подпись точки входа по умолчанию, которую ищет CRT, зависит от типа используемого приложения; если компилятор и компоновщик настроены на создание консольного приложения, они будут искать main
(или wmain
или _tmain
, в зависимости от настроек Юникода), для приложения с графическим интерфейсом они используют WinMain
и DllMain
для dll.
Итак:
- использование
WinMain
если вы строите GUI (= нет консоли для него создается при запуске) заявление;
main
для консольного приложения;
DllMain
для dll.
Опять же, все это не написано в камне (и есть способы запуска приложения с графическим интерфейсом от стандартного main
), но «когда в Риме, делай, как римляне делают» - то есть, как правило, лучше всего следуйте за использованием платформы, чтобы избежать путаницы с другими разработчиками и пройти через непроверенные/неподдерживаемые параметры компилятора, чтобы изменить подпись точки входа.
В общем, 'WinMain()' предназначен для приложений с графическим интерфейсом, 'main()' предназначен для консольных приложений. –