c - это - с main




"Int main(vooid)"? Как это работает? (3)

В C тип по умолчанию для аргумента функции - int . Итак, ваша программа обрабатывает слово vooid как int main(int vooid) , что является вполне допустимым кодом.

Недавно мне пришлось вводить небольшую C-тестовую программу, и в процессе я совершил орфографическую ошибку в основной функции, случайно используя vooid вместо void .

И все же он все еще работал.

Сократив его до самой маленькой полной версии, я закончил:

int main (vooid) {
    return 42;
}

Это действительно компилирует ( gcc -Wall -o myprog myprog.c ), а при запуске возвращает 42.

Как именно этот действительный код?

Вот отрезок транскрипта и вставлен из моей оболочки bash чтобы показать, что я делаю:

pax$ cat qq.c
int main (vooid) {
    return 42;
}

pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq

pax$ echo $?
42

Только gcc -std=c89 -Wall -o qq qq.c и gcc -std=gnu89 -Wall -o qq qq.c не gcc -std=gnu89 -Wall -o qq qq.c предупреждение. Все остальные стандарты vooid предупреждение о неявном типе int для vooid .

int main(chart) ведет себя так же, как int main (vooid) .

return vooid; возвращает количество аргументов командной строки.

Я тестировал gcc 4.4.5 в системе тестирования Debian.


Это просто синтаксис функции-объявления «старый стиль»; вы неявно объявляете параметр int называемый vooid .





main