Mijn compiler (GCC) geeft me de waarschuwing:
waarschuwing: impliciete declaratie van functie
Help me alsjeblieft te begrijpen waarom dit gebeurt.
U gebruikt een functie waarvoor de compiler nog geen declaratie ("prototype") heeft gezien.
Bijvoorbeeld:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Je moet je functie declareren voor main, zoals dit, ofwel rechtstreeks ofwel in een header:
int fun(int x, char *p);
De juiste manier is om functie-prototype in de header te declareren.
#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);
}
Alternatief met één bestand (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Als je de juiste headers hebt gedefinieerd & gebruik maakt van een niet GlibC
bibliotheek (zoals Musl C) zal gcc
ook error: implicit declaration of function
gooien wanneer GNU extensies zoals malloc_trim
worden tegengekomen.
De oplossing is om de extensie & te wikkelen; de header:
#if defined (__GLIBC__)
malloc_trim(0);
#endif