Mir ist bewusst, dass es in C am besten ist, den Rückgabewert malloc()
nie zu übertragen. Ich habe gelesen, dass der Compiler davon ausgeht, dass malloc()
einen Int zurückgibt, wenn Sie stdlib.h
nicht enthalten. Natürlich würde es einen Fehler erzeugen, wenn Sie implizit ein int zu etwas zuweisen würden, das kein int ist, aber dieser Fehler könnte durch eine explizite Umwandlung verdeckt werden - daher die Gefahr, explizit malloc()
zu werfen.Warum nimmt der Compiler an, dass malloc einen int zurückgibt?
Für jede Funktion, die ich erstellt habe, wenn die Funktion nicht existiert, dann wird der Compiler mir das sagen. Warum nimmt der Compiler an, dass malloc()
Int zurückgibt, auch wenn Sie stdlib.h
nicht enthalten? Sollte nicht malloc()
nur undefined bleiben, bis Sie stdlib.h
einschließen?
Eigentlich bin ich ziemlich sicher, dass der Compiler keine Annahmen über die Anzahl der Parameter einer nicht deklarierten Funktion macht. Es ist, als ob du es als int foo (...) erklärst, vorausgesetzt, dass das möglich ist (was ich nicht denke, da Varargs in Standard C mindestens einen Parameter benötigt). Ich habe jedoch nicht meine Kopie von Harbison und Steele bei mir, also könnte ich mich deswegen irren. –
Nein, es ist so, als ob es als 'int foo() 'deklariert wäre - was eine Funktion mit noch nicht spezifizierter (aber definierter!) Anzahl von Argumenten ist; und nicht 'int foo (void)' - was eine Funktion ohne Argumente ist; oder 'int foo (...)' - was, wie du sagst, nicht gültig ist. –