Выполнение в основном методе

Привет,

Обычно мы видим, что выполнение программы начинается в методе main для таких языков, как C , C++ , Java (я знаком с ними). Я хочу знать, как компилятор узнает о наличии метода MAIN в программе.

Что означает метод main, кроме того, что он является точкой входа для выполнения программы... Чем отличаются эти критерии для C , C++...

Дайте любые ссылки, которые вы считаете полезными...


person Flash    schedule 09.09.2010    source источник
comment
В C/C++ он не будет связан с исполняемым файлом без main, потому что среда выполнения вызывает функцию main() для запуска программы. В Java это в основном тот же процесс, но выполняемый при запуске.   -  person Martin York    schedule 09.09.2010
comment
Обратите внимание, что «main» является специальным по умолчанию; связывающий загрузчик может дополнительно указать любое имя функции в качестве точки входа.   -  person mpez0    schedule 09.09.2010
comment
Имейте в виду, что в C++ конструкторы глобальных переменных будут выполняться до main()   -  person gpeche    schedule 10.09.2010
comment
Я думаю, что были предыдущие вопросы по этой теме. Довольно хороший обман Почему имя main для функции main() и связанное с ним C-программа без основной функции?, main() в C, C++, Java, C#. Другие интересные вещи в этом духе: [Отвечает ли программа или ОС за настройку стека](stackoverflow.com/questions/ 3265057).   -  person dmckee --- ex-moderator kitten    schedule 11.09.2010


Ответы (3)


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

Код инициализации выполняет некоторую уборку (например, преобразует возвращаемое значение функции main в код выхода программы и т. д.).

person Diego Sevilla    schedule 09.09.2010

Ничего такого. Это просто условное название начальной точки программы.

в C, main() такая же функция, как sin() или любая другая функция. Единственное требование к размещенной реализации — соответствие одному из прототипов.

int main(void);
int main(int, char **);

Изменить

Вы даже можете сами вызвать main() из своего кода :)

#include <stdio.h>
int main(int argc, char **argv) {
    printf("main() called with %d arguments.\n", argc);
    if (argc) {
        main(0, NULL);
    }
    return 0;
}
person pmg    schedule 09.09.2010
comment
Как вы заметили, это верно для C. В C++ main немного более особенный; его нельзя вызывать напрямую, нельзя перегружать и т. д. - person jamesdlin; 09.09.2010
comment
Хммм ладно. Я этого не знал. Спасибо за наводку :) - person pmg; 09.09.2010
comment
main() также сильно отличается от sin() (по крайней мере, в C) тем, что после возврата из исходного вызова main() вызываются atexit() зарегистрированных функций. - person Jens; 22.08.2011

В Windows все начинается с формата файла Portable Executable: http://en.wikipedia.org/wiki/Portable_Executable.

Адрес входа можно указать через компоновщик: http://msdn.microsoft.com/en-us/library/y0zzbyt4.aspx

Управляемое приложение имеет ссылку на статический метод main в своих метаданных сборки. Опять же, это параметр командной строки компилятора: http://msdn.microsoft.com/en-us/library/6s2x2bzy%28v=VS.71%29.aspx

person Alex    schedule 09.09.2010
comment
-1 за предоставление специфичного для платформы ответа на вопрос, не зависящий от платформы. - person Erick Robertson; 09.09.2010
comment
Ура! Алекс получает +8 репутации за плохой ответ. - person Erick Robertson; 10.09.2010