почему значение параметра внутри основной функции void в C инициализируется 1? - PullRequest
0 голосов
/ 19 мая 2019
#include<stdio.h>
#include<conio.h>
#include<math.h>

void main(main) {
    clrscr();
    printf("%d",main +=pow(++main,++main));
    getch();
}

Итак, я запустил приведенный выше код в компиляторе turboC и получил вывод 12. Я заметил, что значение main всегда инициализируется с 1. поэтому я хочу знать, почему его значение равно 1?почему не что-нибудь еще ??пожалуйста, помогите мне:)

Примечание: я также попытался изменить имя параметра "main" на что-то другое, например x, y и т. д., значение по-прежнему 1, а также вывести тоже самое, то есть 12.

1 Ответ

2 голосов
/ 19 мая 2019

В строго соответствующем коде 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» внутри функции ссылаться на параметр, а не на функцию.

...