C ++ Нет функции main ()? - PullRequest
       19

C ++ Нет функции main ()?

13 голосов
/ 12 июля 2011

Я дипломированный программист, и когда дело доходит до C ++, я ожидаю, что будет main() функция каждый раз.

Однако мне дали проект, написанный на C ++ с Visual Studio 6.0, и у него нет функции main(). Я действительно не могу понять, как эта программа выполняется или где она начинается.

Я видел примеры макроса, который можно использовать для изменения имени функции main(), однако этот код не показывает никаких признаков этой практики.

Кто-нибудь может подсказать, что я должен искать?

Ответы [ 5 ]

14 голосов
/ 12 июля 2011

Возможно, основная функция находится в библиотеке, и программа запускается с помощью вызова виртуальной функции для статического объекта. Вот что происходит в MFC-приложениях.

Программа извлекает класс из CWinApp и создает его один раз как статическую переменную. Затем MFC знает указатель (который был установлен конструктором CWinApp и вызывает виртуальную функцию InitInstance () для этого указателя.

Видите, вот где программное обеспечение из программы берет верх ...

14 голосов
/ 12 июля 2011

Во-первых, это может быть библиотека, DLL или статическая библиотека, которая не может иметь main().И, во-вторых, это может быть приложение Windows, которое имеет другую точку входа, например WinMain().Также в Visual Studio есть функция _tmain() или другая, которая является своего рода оболочкой для main()

3 голосов
/ 12 июля 2011

Хотя в стандарте указано, что программа должна иметь основную функцию, она не должна быть написана разработчиком приложения, если в библиотеках, для которых установлена ​​связь, определена основная функция.Кроме того, некоторые компоновщики позволяют переопределить точку входа на что-то отличное от main.

Есть ли вообще WinMain?

2 голосов
/ 12 июля 2011

Если вы пишете консольное приложение Win - вам нужен main (), но если вы имеете дело с DLL, вы ожидаете DllMain () для оконного приложения, вы должны ожидать WinMain ()

1 голос
/ 02 июля 2018

Просто для информации, поскольку это не общий случай, в C (и я полагаю, в C ++) могут быть программы без главной функции. (Я работал с одним несколько лет назад). Конечно, это была встроенная среда программирования, а не Windows.

Хитрость была в том, что стартовый код на ассемблере вызывал совершенно другую функцию после завершения выполнения.

Так что даже наши учителя рассказывали нам о том, что в C / C ++ всегда есть главное, что не является абсолютной истиной

...