2015-03-05 2 views
1

Проверка 64 бит Debian. Gcc 4.8.x и GCC 4.9.xC - Функция с псевдонимом?

Я наткнулся на эту функцию в Glibc:

int 
rename (old, new) 
    const char *old; 
    const char *new; 
{ 
    if (old == NULL || new == NULL) 
    { 
     __set_errno (EINVAL); 
     return -1; 
    } 

    __set_errno (ENOSYS); 
    return -1; 
} 


stub_warning (rename) 

Моя проблема заключается

int 
rename (old, new) 
    const char *old; 
    const char *new; 
{ 
... 
} 

Когда я пытаюсь скомпилировать его бросает:

declaration for parameter ‘old’ but no such parameter

То же самое для нового.

Что происходит?

Что это за синтаксис?

Спасибо

Update:

я действительно имею в виду это: Look at that code, which is the same as glibc

Update2:

Он работает в настоящее время. Опечатка испортила все это. Он должен работать безупречно для вас.

+0

Для этой задачи было бы полезно узнать, какой компилятор вы компилируете с, в том, что окружающей среде вы компилировать и какие флаги компиляции вы установите. – dhein

+0

@Zaibis: done :) – Kroma

+0

gcc компилирует по умолчанию с помощью '-std = gnu99' (AFAIK), этот режим не поддерживает список идентификаторов c. попробуйте с явным '-std = c90' вместо – dhein

ответ

4

Это старый стиль определения функций (технически C называется это определение функции с формой -идентификатора списка для описания параметра). Это устаревшая функция в C, и поведение имеет некоторые незначительные отличия от деклараций и определений прототипов.

Используйте форму прототипа вместо:

int 
rename (const char *old, const char *new) 
{ 
... 
} 
+0

Хорошо, но он все еще компилируется для glibc, но не для моего тестового примера. Зачем ? – Kroma

+0

@ Kroma попробуйте скомпилировать с -std = c90 – dhein

+0

Сделал это уже, не повезло – Kroma

0

Я думаю, что это то, что вы имели в виду сделать

int rename(const char *old, const char *new) 
{ 
... 
} 
+0

Я обновил вопрос, чтобы показать исходный источник, показывающий реализацию. Я говорю о – Kroma

Смежные вопросы