Mein Compiler (GCC) gibt mir die Warnung:
Warnung: implizite Deklaration einer Funktion
Bitte helfen Sie mir zu verstehen, warum das so ist.
Sie verwenden eine Funktion, für die der Compiler noch keine Deklaration ("prototype") gesehen hat.
Zum Beispiel:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Sie müssen Ihre Funktion vor main deklarieren, so wie hier, entweder direkt oder in einer Kopfzeile:
int fun(int x, char *p);
Der richtige Weg ist, den Funktionsprototyp in der Kopfzeile zu deklarieren.
#ifndef MAIN_H
#define MAIN_H
int some_main(const char *name);
#endif
main.c
#include "main.h"
int main()
{
some_main("Hello, World\n");
}
int some_main(const char *name)
{
printf("%s", name);
}
Alternative mit einer Datei (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Wenn Sie die richtigen Header definiert haben & eine nicht GlibC
Bibliothek (wie Musl C) verwenden, wird gcc
auch error: implicit declaration of function
ausgeben, wenn GNU Erweiterungen wie malloc_trim
angetroffen werden.
Die Lösung ist, die Erweiterung & den Header zu umhüllen:
#if defined (__GLIBC__)
malloc_trim(0);
#endif