Это старый, устаревший способ написания функций C.
В языке-предке C не было типов: все переменные содержали машинное слово. Таким образом, определение функции будет начинаться так:
main(u, _, a) {
/* ... some code ... */
}
С, каким он был раньше, известный как "K&R C" от авторов основной книги о C (Брайан Керниган и Деннис Ритчи) добавили типы в форму которые выглядели как объявления переменных и находились между списком параметров функции и кодом функции.
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 по-прежнему поддерживают старую форму для устаревшего кода. (Если они соответствуют стандарту C 1989 года, то должны.) Спустя более 20 лет осталось не так много унаследованного кода, поэтому вы не часто найдете такой код.
(Обратите внимание, что это не правильный тип для main
. Я думаю, что Gcc предупредит вас об этом, но вам, возможно, придется увеличить настройки предупреждения.)
19.12.2013