Mon compilateur (GCC) me donne l'avertissement :
warning : déclaration implicite de la fonction
Veuillez m'aider à comprendre pourquoi.
Vous utilisez une fonction pour laquelle le compilateur n'a pas encore vu de déclaration ("prototype" ;).
Par exemple :
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Vous devez déclarer votre fonction avant main, comme ceci, soit directement, soit dans un en-tête :
int fun(int x, char *p);
La bonne méthode consiste à déclarer le prototype de la fonction dans l'en-tête.
Exemple Exemple 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);
}
Alternative avec un seul fichier (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Si vous avez défini les bons en-têtes & ; si vous utilisez une bibliothèque non GlibC
(telle que [Musl C][1]), gcc
lancera également error : implicit declaration of function
lorsque des extensions GNU telles que malloc_trim
sont rencontrées.
La solution consiste à [envelopper l'extension & ; l'en-tête][2] :
#if defined (__GLIBC__)
malloc_trim(0);
#endif
[1] : http://www.musl-libc.org/ [2] : http://patchwork.alpinelinux.org/patch/517/