Для чего нужен метод main?

здраствуйте! все никак не могу понять суть метода main. Везде написано мол программа стартует именно с того класса где есть метод майн и в нем (тело метода майн) написан код который будет исполнятся. А разве не пользователь своими действиями определяет порядок, решает какие именно методы и переменные и т.д. будут использоваться в зависимости от его требования ? тогда как можно заранее описать методы которые будут исполняться в методе майн? А если я не так понял суть метода майн помогите пожалуйста разобраться для чего нужен метод майн и что он вообще определяет в своем теле ?
  • Вопрос задан
  • 5389 просмотров
Пригласить эксперта
Ответы на вопрос 3
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
В операционной системе есть часть системного кода целью которой является "Запуск программы на выполнение". Когда Вы "жахаете" дважды по exe-файлу эта часть создает процесс, создает первичный поток, проецирует куски данных из вашего exe-файла на регионы памяти в процесс и др. не менее важные процессы.

Когда сис.загрузчик хочет найти и передать управление первичному потоку, он должен ответить на вопрос "А где искать машинный код для первичного потока?". Он, сис.загручик, знает как устроен формат exe-файла и отыскивает значение указателя где расположен код, откуда следует начать работу программы записанной в exe-файле. Для exe-файлов смотри хидер winnt.h в IMAGE_OPTIONAL_HEADER поле AddressOfEntryPoint.

В каждом, современном исполняемом файле, как правило, две точки входа. Одна из них является ничем иным "стартовым кодом", иногда именуемая runtime-code или "стабом". Эта часть генерируется компилятором и достаточно часто повторяется для всех файлов генерируемых компилятором. А другая часть "пользовательская", вот это пользовательская и есть Ваша main(). Но ее наименование можно по-другому настроить(см. документацию к Вашему компилятору).

Что рантайм-код, что Ваша main() это ни что иное как функции обратного вызова. Их вызывает сам сис.загрузчик. После того как рантайм-код записан в файл, указатель на него записывается в AddressOfEntryPoint(см.выше), в процессе работы в недрах сгенерированного рантайм-кода есть переход на вашу main().
Ответ написан
Комментировать
Boxxy
@Boxxy
Суть main - точка входа. Программа должна откуда-то "начать" своё исполнение. Когда система запускает ваше приложение, она вызывает в нем main. Не могу понять, что непонятного.
Ответ написан
@AlexTheLost
В программе нужно определить место начала её работы, другим словами точку входа. Разработчиками языка было принято что процедура/метод с названием main запускается первой в программе, т.е. main это соглашение. Название main закрепилось исторически, в некоторых языках точки входа в программу имеют другие названия и даже другую форму, т.е. не являются процедурой/методом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы