advarsel: implisitt funksjonserklæring

Kompilatoren min (GCC) gir meg advarselen:

advarsel: implisitt erklæring av funksjon

Vennligst hjelp meg å forstå hvorfor den kommer.

Løsning

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);
Kommentarer (14)

Den riktige måten er å erklære funksjonsprototypen i toppteksten.

Eksempel

**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);
}

Alternativ med én fil (main.c) **.

static int some_main(const char *name);

int some_main(const char *name)
{
    // do something
}
Kommentarer (0)

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
Kommentarer (0)