Это старый, устаревший способ написания функций C.
На языке предков C не было типов: все переменные содержали машинное слово. Таким образом, определение функции будет начать так:
main(u, _, a) {
/* ... some code ... */
}
C as it used to be, известный как «K & RC» от авторов seminal book about C (Brian Керниган и Деннис Ритчи) добавлены типы в виде, похожем объявления переменных и были между списком параметров функции и кодом функции.
int main(u, _, a)
int u;
int _;
char *a;
{
/* ... some code ... */
}
В K & R C, если тип является int
, то во многих местах он может быть опущен. Для параметра функции вы можете вообще опустить строку объявления типа.
int main(u, _, a)
char *a;
{
/* ... some code ... */
}
ANSI C был стандартизирован в 1989 году, и одна из его главных новшеств были прототипами функций. В правильном ANSI C вы объявляете все функции перед использованием и объявляете типы всех аргументов.
int main(int u, int _, char *a)
{
/* ... some code ... */
}
Компиляторы C по-прежнему поддерживают старую форму для устаревшего кода. (Если они соответствуют стандарту 1989 C, они должны это делать.) После более чем 20 лет осталось много устаревшего кода, поэтому вы часто не найдете такой код.
(Обратите внимание, что это не правильный тип для main
. Я думаю, что Gcc предупредит вас об этом, но вы, возможно, придется включить настройки предупреждения вверх.)
Похоже функции стиля до C89. – chux
Чтобы добавить забавный факт, который не заслуживает ответа: мне пришлось использовать этот стиль деклараций функций при написании 16-битной загрузочной программы. gcc не компилируется в 16 бит, поэтому мне пришлось использовать bcc (компилятор Bruce's C), который не поддерживает ANSI. Таким образом, вы можете столкнуться с этим материалом в некоторых областях! – Guido