Il mio compilatore (GCC) mi sta dando l'avviso:
avviso: dichiarazione implicita di funzione
Per favore aiutatemi a capire perché sta arrivando.
State usando una funzione per la quale il compilatore non ha ancora visto una dichiarazione ("prototipo").
Per esempio:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Dovete dichiarare la vostra funzione prima di main, così, direttamente o in un'intestazione:
int fun(int x, char *p);
Il modo giusto è dichiarare il prototipo della funzione nell'intestazione.
Esempio main.h
#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);
}
Alternativa con un solo file (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Se avete gli header corretti definiti & state usando una libreria non GlibC
(come Musl C) gcc
lancerà anche errore: dichiarazione implicita di funzione
quando si incontrano estensioni GNU come malloc_trim
.
La soluzione è di avvolgere l'estensione & l'intestazione:
#if defined (__GLIBC__)
malloc_trim(0);
#endif