Почему типы параметров объявлены вне скобок? - PullRequest
10 голосов
/ 09 апреля 2010

иногда я вижу, что функции определены так:

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

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

вот в чем важность утверждения

char    *dir;

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

Ответы [ 2 ]

12 голосов
/ 09 апреля 2010

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

Что раньше было написано так:

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

сейчас

int foo(int a, int b)
{
}
8 голосов
/ 09 апреля 2010

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

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

Даже после публикации стандарта 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...