Почему типы параметра объявляются вне круглой скобки?

несколько раз я вижу, что функции определяются как указано ниже:

read_dir(dir)
char    *dir;   
{
        DIR * dirp;
        struct dirent *d;

        /* open directory */
        dirp = opendir(dir);
  ......... so  on

здесь, какова важность оператора

char    *dir;

каково содержание позади объявления указателя вскоре после имени функции и затем запуска тела функции.

10
задан Stephen 23 August 2011 в 16:00
поделиться

2 ответа

Это старый синтаксис языка C, называемый "K&R C", поскольку именно в таком виде он появился в оригинальной версии легендарной книги.

То, что раньше писалось так:

foo(a, b)
int a;
int b;
{
}

теперь

int foo(int a, int b)
{
}
12
ответ дан 3 December 2019 в 19:32
поделиться

Это просто "старый стиль", определение функции K&R C (см. книгу Кернигана и Ричи , обычно называется просто Kernighan & Ritchie .)

Код, на который вы ссылаетесь, мог быть написан в конце восьмидесятых или начале девяностых годов с учетом переносимости (т. е. совместимости со старыми компиляторами, возможно, более «экзотических») платформы) в виду.

Даже после публикации стандарта C 1989 года, в течение многих лет K&R C все еще считался «наименьшим общим знаменателем», которым программисты на C ограничивались, когда требовалась максимальная переносимость, поскольку многие старые компиляторы все еще использовались, и потому что тщательно написанный код K&R C также может быть законным стандартом 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.

8
ответ дан 3 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: