2010-09-09 7 views
1

HII,Исполнения по основному методу

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

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

Предоставлять какие-либо ссылки, которые вы считаете полезны ...

+0

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

+0

Обратите внимание, что по умолчанию «main» является только специальным; связующий загрузчик может дополнительно указать любое имя функции в качестве точки входа. – mpez0

+0

Имейте в виду, что в C++ будут выполняться конструкторы глобальных переменных * before * 'main()' – gpeche

ответ

4

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

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

0

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

Запись адрес может быть определен через линкер: http://msdn.microsoft.com/en-us/library/y0zzbyt4.aspx

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

+0

Thanx для ссылок – Flash

+0

-1 для обеспечения специфического для платформы ответа на вопрос об агностике платформы –

+0

+1, потому что оценка этого ответа должна оставаться неотрицательной. –

1

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

в 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; 
} 
+1

Как вы отметили, это верно для C. В C++ 'main' является немного более особенным; он не может быть вызван напрямую, не должен перегружаться и т. д. – jamesdlin

+0

Хммм, хорошо. Я этого не знал. Спасибо за хэдз-ап :) – pmg

+0

'main()' также сильно отличается от 'sin()' (по крайней мере, в C) тем, что после возврата от начального вызова 'main()' 'atexit() Вызываются зарегистрированные функции. – Jens

Смежные вопросы