Подтвердить что ты не робот

Как разрешить предупреждение компилятора "неявное объявление функции memset"

Мой код c использует "memset" и "close". И я добавил:

#include <stdio.h>
#include <glib.h>
#include <stdlib.h>

Но я все еще получаю эти предупреждения:

main.c:259: warning: implicit declaration of function ‘memset’
main.c:259: warning: incompatible implicit declaration of built-in function ‘memset’
main.c:268: warning: implicit declaration of function ‘close’
main.c:259: warning: incompatible implicit declaration of built-in function ‘close’

Не могли бы вы рассказать мне, как я могу разрешить эти предупреждения?

Спасибо.

4b9b3361

Ответ 1

Вам нужно:

#include <string.h> /* memset */
#include <unistd.h> /* close */

в вашем коде.

Ссылки: POSIX для close, стандарт C для memset.

Ответ 2

Хороший способ узнать, какой файл заголовка отсутствует:

 man <section> <function call>

Чтобы узнать, как использовать этот раздел:

apropos <function call>

Пример:

 man 3 memset
 man 2 send

Редактировать в ответ на Джеймса Морриса:

  • Раздел | Описание
  • 1 Общие команды
  • 2 Системные вызовы
  • Функции библиотеки 3 C
  • 4 Специальные файлы (обычно устройства, те, которые найдены в /dev ) и драйверы
  • 5 Форматы файлов и условные обозначения
  • 6 Игры и скринсейверы
  • 7 Miscellanea
  • 8 Команды администрирования системы и Демоны

Источник: Личная страница Википедии

Ответ 3

memset требуется импортировать файл заголовка string.h. Поэтому просто добавьте следующий заголовок

#include <string.h>
...

Ответ 4

Попробуйте добавить следующее определение в начале вашего .c файла:

#define _GNU_SOURCE

Это помогло мне с функцией pipe2.

Ответ 5

Старый вопрос, но у меня была аналогичная проблема, и я решил ее, добавив

extern void* memset(void*, int, size_t);

или просто

extern void* memset();

в верхней части единицы перевода (*.c файл).