Ответ 1
Это более старый синтаксис C, kalled " K & RC", так как он появился в исходной версии легендарная книга.
Что раньше было написано так:
foo(a, b)
int a;
int b;
{
}
теперь
int foo(int a, int b)
{
}
несколько раз я вижу, что функции определены ниже:
read_dir(dir)
char *dir;
{
DIR * dirp;
struct dirent *d;
/* open directory */
dirp = opendir(dir);
......... so on
вот в чем важность утверждения
char *dir;
что такое намерение за объявлением указателя вскоре после имени функции, а затем запуск тела функции.
Это более старый синтаксис C, kalled " K & RC", так как он появился в исходной версии легендарная книга.
Что раньше было написано так:
foo(a, b)
int a;
int b;
{
}
теперь
int foo(int a, int b)
{
}
Это просто "старый стиль", определение функции K & RC (см. Книга Кернигана и Ричи, обычно называемая просто Керниганом и Ричи.)
Код, на который вы ссылаетесь, возможно, был написан в конце восьмидесятых или в начале девяностых с переносимостью (т.е. совместимость со старыми компиляторами, возможно, на более "экзотических" платформах).
Даже после публикации стандарта C 1989 года K & RC по-прежнему считался "самым низким общим знаменателем", которому программисты C ограничивали себя, когда была необходима максимальная мобильность, поскольку многие старые компиляторы все еще использовались, и потому что тщательно написанный K & RC-код также может быть стандартным стандартом C.
Некоторые люди могут полагать, что определение функции K & R-стиля, которое все еще поддерживается компиляторами, более читаемо, что на самом деле не обязательно верно; Для сравнения:
some_function(param1,param2,param3)
char *param1; /* param1 comment */
int param2; /* param2 comment */
short param3; /* param3 comment */
{
}
с
/* notice also that return type is explicitly specified now */
int
some_function(
char *param1, /* param1 comment */
int param2, /* param2 comment */
short param3 /* param3 comment */
)
{
}
Определения функции K & R-стиля были устаревшими с 1989 года; видеть раздел 6.9.5 "Определения функций" в стандарте C90.