Почему я получаю предупреждение каждый раз, когда использую malloc? - PullRequest
108 голосов
/ 05 августа 2009

Если я использую malloc в своем коде:

int *x = malloc(sizeof(int));

Я получаю это предупреждение от gcc:

new.c:7: warning: implicit declaration of function ‘malloc’  
new.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’

Ответы [ 4 ]

221 голосов
/ 05 августа 2009

Вам нужно добавить:

#include <stdlib.h>

Этот файл содержит объявление для встроенной функции malloc. Если вы этого не сделаете, компилятор решит, что вы хотите определить свою собственную функцию с именем malloc, и предупредит вас, потому что:

  1. Вы явно не объявляете это и
  2. Уже существует встроенная функция с таким именем, которая имеет подпись, отличную от той, которая была объявлена ​​неявно (когда функция объявляется неявно, ее тип возвращаемого значения и аргумента предполагаются int, что t совместим со встроенным malloc, который принимает size_t и возвращает void*).
30 голосов
/ 05 августа 2009

Вы еще не сделали #include <stdlib.h>.

16 голосов
/ 05 августа 2009

Вам необходимо включить заголовочный файл, который объявляет функцию, например:

#include <stdlib.h>

Если вы не включите этот заголовочный файл, функция не известна компилятору. Так что он видит это как необъявленное.

10 голосов
/ 05 августа 2009

привычка искать ваши функции в справке.

Большинство справок для C смоделировано на страницах справочника Unix.

man malloc

дает довольно полезные результаты.

Гугл человек Маллок покажет вам, что я имею в виду.

Конечно, в Unix вы также можете получить информацию о связанных вещах.

...