Я прочитал несколько необычных для меня C-кодов, изучая некоторые примеры в книге «Среда программирования Unix» (1983).
Из любопытства я хотел узнать больше о, скажем так, «стиле». Здесь интересна строка чуть ниже int main(argc, argv)
.
#include <stdio.h>
int main(argc, argv)
char *argv[];
{
printf("%s\n", argv[0]);
return 0;
}
В своем исследовании я обнаружил, что компиляция приведенного выше кода с флагами -Wall -pedantic -ansi
работает без каких-либо предупреждений, а замена -ansi
на более новый -std=c99
(или c11
с gcc
и cc
) предупреждает только о argc
по умолчанию int
.
Я просмотрел старый стандарт C89, пытаясь найти ссылки на этот конкретный способ записи, но ничего не нашел самостоятельно, поэтому я полагаюсь на более широкое знание коллектива.
Отсюда вопрос, откуда взялось это эзотерическое письмо и, возможно, почему оно до сих пор разрешено (причины наследия?)
int
, а аргументы будут типизированы в указанном вами стиле. Не было прототипов функций, только объявления функций. Стандарт C89 добавлял прототипы, но также поддерживал стиль K&R как допустимый по устаревшим причинам. - person Michael Burr   schedule 25.06.2014