2013-11-15 5 views
0

EDIT: предупреждение в первом абзаце было связано с тем, что я читал старый журнал из компилятора (до включения unistd.h, извините за пропущенную консоль, вторая проблема все еще сохраняется) У меня есть код который использует функцию un unlink (объявляется в unistd.h). После компиляции с gcc -Wall я получаю предупреждение: implicit declaration of function ‘unlink’ Теперь я теперь, что это всего лишь предупреждение, но это меня раздражает, и я хотел бы, как бы это было правильно. Мое настоящее решение состоит в том, чтобы просто добавить строку extern int unlink(const char *path); к коду, но это кажется немного глупым, так как я также вклюаю unistd.hнеявное объявление функции swab

Раньше я получал предупреждение об использовании функции swab (также объявленной в unistd. ч), но удалось, после осмотра unistd.h, чтобы решить эту проблему путем добавления строки

#ifndef __USE_XOPEN 
#define __USE_XOPEN 
#endif 

Не уверен, что это правильная вещь, чтобы сделать какие-либо идеи к этому также будут оценены.

+0

Что-то очень сильно нарушает вашу систему, если вам нужно создать ifdef для использования unlink. –

+0

Возможно, вы правы, сообщение обновлено – cpaitor

ответ

1

Ссылаясь на ваш второй вопрос ("неявное объявление функции sawb"):

Заменить

#ifndef __USE_XOPEN 
#define __USE_XOPEN 
#endif 

с

#define _XOPEN_SOURCE 

... поместив его перед всеми другими #include заявления #include <unistd.h> должен сделать прототипирование для swab() be avail возможность.


#define s, начиная с двойным подчеркиванием __ зарезервированы для внутреннего использования и не должны быть установлены программой непосредственно.

+0

Хммм, нехорошо, это просто дало мне предупреждение о неявной декларации тампона обратно – cpaitor

+0

@cpaitor: Какую версию и платформу gcc вы используете? Также см. Мой обновленный ответ. – alk

+0

gcc 4.6.2, openuSuSe 12.1, я понял, что '__' не должен использоваться, о, я также обновил свой вопрос, поскольку предупреждение о разблокировке на самом деле не было, извините за это – cpaitor

0

У вас, скорее всего, есть опечатка или что-то простое неправильное ..... попробуйте это.

#include <unistd.h> 

int 
main() 
{ 
    int r; 

    r = unlink("foo"); 

    return(r); 
} 

Компиляция это

gcc -Wall foo.c 

Выше должна быть чистой компиляции. Вы можете предварительно обработать и выполнить команду grep, чтобы убедиться, что декларация unlink втянута.

sys> gcc -E foo.c | grep unlink 
int unlink(const char *); 
r = unlink("foo"); 
+0

Хмммм, это скомпилировано как шарм. Вероятно, вы правы в том, что есть некоторые проблемы с кодом, я не писал это самостоятельно, но я застрял в попытке убрать беспорядок – cpaitor

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