2009-08-04 21 views
96

Se uso malloc nel mio codice:Perché ricevo un avviso ogni volta che utilizzo malloc?

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

ricevo questo avvertimento da gcc:

new.c: 7: avvertimento: dichiarazione implicita di funzione 'malloc'
new.c : 7: warning: incompatibili dichiarazione implicita di funzione built-in 'malloc'

risposta

203

è necessario aggiungere:

#include <stdlib.h> 

Questo file include la dichiarazione per la funzione built-in malloc. Se non lo fai, il compilatore pensa che si desidera definire una funzione denominata malloc e ti mette in guardia perché:

  1. non preciserete dichiararlo e
  2. C'è già è un built -in funzione con quel nome che ha una firma diversa da quella che è stata dichiarata implicitamente (quando una funzione è dichiarata implicitamente, i suoi tipi di ritorno e argomento sono considerati int, che non è compatibile con il built-in malloc, che prende un size_t e restituisce un void*).
+23

+1 per una descrizione effettiva del messaggio –

+5

Terminologia nit: non esiste una funzione incorporata in C. malloc è semplicemente una funzione della libreria C standard. – Jens

+4

@Jens Non vedo un problema con riferimento alle funzioni di libreria standard come built-in - e nemmeno le persone gcc apparentemente dal momento che il messaggio di errore utilizzava anche la parola "built-in" (che è il motivo per cui l'ho fatto). – sepp2k

28

non hai fatto #include <stdlib.h>.

15

è necessario includere il file di intestazione che dichiara la funzione, ad esempio:

#include <stdlib.h> 

Se non si include questo file di intestazione, la funzione non è nota al compilatore. Quindi lo vede come non dichiarato.

10

prendere l'abitudine di guardare le vostre funzioni in aiuto.

la maggior parte del supporto per C è modellata sulle pagine di manuale di Unix.

man malloc

fornisce risultati piuttosto utili.

googling man malloc vi mostrerà cosa intendo.

ovviamente in unix si ottiene anche a proposito di cose che sono correlate.

+1

Solo se sai già che la riga '#include ' nella sinossi significa che devi scriverlo nel tuo programma. –

+1

Se qualcuno ha letto le altre risposte qui, ora lo sapranno. – MikeKulls

Problemi correlati