В строго соответствующем коде C, main должен быть объявлен как один из следующих или эквивалентных:
int main(void)
int main(int argc, char *argv[])
Когда main
объявлен с последним, argv
содержит указатели на (первыйсимволов) строк, а argc
содержит количество таких указателей в argv
.argv[0]
представляет имя программы, а следующие элементы являются параметрами программы.
Ваш компилятор принимает очень старый синтаксис, в котором тип может быть опущен в объявлении.Так int main(x)
объявляет x
параметром типа int
.Это не совсем соответствует C, но ваш компилятор принимает его.
Когда вы запускаете программу без аргументов, ей передается только имя программы в argv[0]
.Так как есть только имя программы и никаких аргументов, argc
устанавливается в 1.
Использование main
для имени параметра, как в int main(main)
, является плохой практикой, но оно не имеет специальных эффектовза исключением того, что он заставляет идентификатор «main» внутри функции ссылаться на параметр, а не на функцию.