Неявное объявление функции тампона

РЕДАКТИРОВАТЬ: предупреждение в первом абзаце было из-за того, что я читал старый журнал из компилятора (перед включением 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");
Другие вопросы по тегам