Объявить основной прототип

есть ли причина, по которой я никогда не вижу прототип main, объявленный в программах C, т. е.:

int main(int argc, char* argv[]);

int main(int argc, char* argv[])
{
    return 0;
}

всегда казалось несовместимым..

4 ответов


стандарт языка C, проект n1256:

5.1.2.2.1 запуск программы

1 функция, вызываемая при запуске программы называется main. реализация объявляет прототип для этой функции. Он определяется с помощью возвращаемого типа int и без параметры:

int main(void) { /* ... */ }

или с двумя параметрами (называемыми здесь argc и argv хоть какие-то имена могут быть используется, как они локальны для функции, в которой они объявлены):

int main(int argc, char *argv[]) { /* ... */ }

или эквивалент;9) или каким-либо другим образом, определенным реализацией.

выделено мной.


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


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


простая причина в том, что управление всегда сначала идет в main.Так оно и есть!--1-->автоматически компилятором таким образом, предоставление его прототипа является избыточным и бесполезным.

также мы используем прототип, когда вызов функции до ее определения.Таким образом, глядя на компилятор прототипа функции, можно решить, является ли вызов законным или нет.Но в случае main мы привыкли предоставлять свое определение вместе с его декларация (что также логически правильно), таким образом, нет необходимости в прототипе.

даже когда мы делаем наши программы c, организованные в несколько файлов, нет необходимости в прототипе main.