Warum erhalte ich jedes Mal eine Warnung, wenn ich malloc verwende?
Lesezeit: 2 Minuten
Kredns
Wenn ich benutze malloc in meinem Code:
int *x = malloc(sizeof(int));
Ich bekomme diese Warnung von gcc:
new.c:7: warning: implicit declaration of function ‘malloc’
new.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’
sepp2k
Sie müssen hinzufügen:
#include <stdlib.h>
Diese Datei enthält die Deklaration für die eingebaute Funktion malloc. Wenn Sie das nicht tun, denkt der Compiler, dass Sie Ihre eigene Funktion namens definieren möchten malloc und es warnt Sie, weil:
Du deklarierst es nicht explizit und
Es gibt bereits eine eingebaute Funktion mit diesem Namen, die eine andere Signatur als die implizit deklarierte hat (wenn eine Funktion implizit deklariert wird, wird davon ausgegangen, dass ihre Rückgabe- und Argumenttypen sind intdas nicht mit dem integrierten kompatibel ist mallocwas dauert size_t und gibt a zurück void*).
Terminologie nit: Es gibt keine eingebaute Funktion in C. malloc ist einfach eine Funktion aus der Standard-C-Bibliothek.
– Jens
13. Oktober 2012 um 14:55 Uhr
@Jens Ich sehe kein Problem darin, Standardbibliotheksfunktionen als eingebaut zu bezeichnen – und die gcc-Leute offenbar auch nicht, da in der Fehlermeldung auch das Wort “eingebaut” verwendet wurde (weshalb ich es getan habe).
– sepp2k
13. Oktober 2012 um 15:17 Uhr
@sepp2k Nun, ich tun ein Problem sehen. Die Verwendung ist nicht standardisiert. Compiler kann eingebaute Funktionen haben und gcc kann malloc eingebaut haben. Aber wie ich geschrieben habe, in Cgibt es keine eingebauten Funktionen.
– Jens
13. Oktober 2012 um 15:21 Uhr
Du hast es nicht getan #include <stdlib.h>.
andri
Sie müssen die Header-Datei einschließen, die die Funktion deklariert, zum Beispiel:
#include <stdlib.h>
Wenn Sie diese Header-Datei nicht einbinden, ist die Funktion dem Compiler nicht bekannt. Es sieht es also als nicht deklariert an.
Tim Williscroft
Machen Sie es sich zur Gewohnheit, Ihre Funktionen in der Hilfe nachzuschlagen.
Die meiste Hilfe für C ist den Unix-Handbuchseiten nachempfunden.
Verwendung:
man malloc
liefert ziemlich brauchbare Ergebnisse.
Googeln man malloc wird dir zeigen was ich meine.
In Unix bekommt man auch Apropos für Dinge, die verwandt sind.
RobertS unterstützt Monica Cellio
Neben den anderen sehr guten Antworten möchte ich einen kleinen Nitpick machen und etwas abdecken, was in den anderen Antworten noch nicht besprochen wird.
Wenn Sie bei Linux sind, verwenden malloc() in deinem Code,
Du eigentlich nicht müssen, zu … haben#include <stdlib.h>.
(Obwohl die Verwendung von stdlib.h ist sehr verbreitet und wahrscheinlich sollte jedes Nicht-Spielzeugprogramm es so oder so enthalten, da es eine breite Palette nützlicher C-Standardbibliotheksfunktionen und Makros bietet)
Du könntest auch #include <malloc.h> stattdessen.
Aber bitte beachten Sie, dass die Verwendung von malloc.h ist veraltet und macht Ihren Code nicht portierbar. Wenn Sie verwenden möchten malloc() Sie sollten immer und immer (außer aus ausdrücklichen Gründen, etwas anderes zu tun) #include <stdlib.h>.
Die Gründe warumwerden am besten in den Antworten auf diese Frage erklärt:
Unterschied zwischen und
14221900cookie-checkWarum erhalte ich jedes Mal eine Warnung, wenn ich malloc verwende?yes