Kompilatoren min (GCC) gir meg advarselen:
advarsel: implisitt erklæring av funksjon
Vennligst hjelp meg å forstå hvorfor den kommer.
Du bruker en funksjon som kompilatoren ikke har sett en deklarasjon ("prototype") for ennå.
For eksempel
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Du må erklære funksjonen din før main, slik som dette, enten direkte eller i en overskrift:
int fun(int x, char *p);
Den riktige måten er å erklære funksjonsprototypen i toppteksten.
#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);
}
Alternativ med én fil (main.c) **.
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Hvis du har definert de riktige overskriftene og bruker et bibliotek som ikke er GlibC
(for eksempel Musl C), vil gcc
også kaste feil: implisitt deklarasjon av funksjon
når GNU-utvidelser som malloc_trim
oppstår.
Løsningen er å wrap the extension &; the header:
#if defined (__GLIBC__)
malloc_trim(0);
#endif