Неявное объявление функции тампона
РЕДАКТИРОВАТЬ: предупреждение в первом абзаце было из-за того, что я читал старый журнал из компилятора (перед включением unistd.h, извините за промах, вторая проблема все еще сохраняется) У меня есть код, который использует функцию c unlink (объявлено в unistd.h). После компиляции с gcc -Wall я получаю предупреждение: implicit declaration of function ‘unlink’
Теперь я понимаю, что это всего лишь предупреждение, но это меня немного раздражает, и мне хотелось бы найти правильный способ решения этой проблемы. Мое текущее решение - просто добавить строку extern int unlink(const char *path);
к коду, но это кажется немного глупым, так как я также включаю unistd.h
Раньше я получал предупреждение об использовании функции swab (также объявленной в unistd.h), но мне удалось, после проверки unistd.h, решить эту проблему, добавив строки
#ifndef __USE_XOPEN
#define __USE_XOPEN
#endif
Не уверен, что это правильная вещь, поэтому любая оценка этого также будет оценена.
2 ответа
Ссылаясь на ваш второй вопрос ("неявное объявление функции sawb
"):
замещать
#ifndef __USE_XOPEN
#define __USE_XOPEN
#endif
с
#define _XOPEN_SOURCE
... помещая это перед всеми остальными #include
заявления #include <unistd.h>
должен сделать прототип для swab()
быть доступным.
#define
s начинается с двойного подчеркивания __
зарезервированы для внутреннего использования и не должны устанавливаться программой напрямую.
Скорее всего, вы опечатка или что-то просто не так..... попробуйте это.
#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");