Mi compiler (GCC) este să-mi dea avertisment:
atentie: implicit declarație de funcție
Te rog ajută-mă să înțeleg de ce vine.
Utilizați o funcție pentru care compilatorul nu a văzut o declarație ("prototip") cu toate acestea.
De exemplu:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Ai nevoie să declare funcția dumneavoastră înainte principale, cum ar fi acest lucru, fie direct, fie într-un antet:
int fun(int x, char *p);
Cel mai bine este să declare funcția de prototip în antet.
#ifndef MAIN_H
#define MAIN_H
int some_main(const char *name);
#endif
principal.c
#include "main.h"
int main()
{
some_main("Hello, World\n");
}
int some_main(const char *name)
{
printf("%s", name);
}
Alternativă cu un fișier (principal.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Când faci #include în principal.c, pune #include referință la fișierul care conține referire funcție în partea de sus a include lista. de exemplu, Spun acest lucru este principal.c și referite funcție este în "SSD1306_LCD.h"
#include "SSD1306_LCD.h"
#include "system.h" #include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <string.h>
#include <math.h>
#include <libpic30.h> // http://microchip.wikidot.com/faq:74
#include <stdint.h>
#include <stdbool.h>
#include "GenericTypeDefs.h" // This has the 'BYTE' type definition
Cele de mai sus nu va genera "implicit declarație de funcție" eroare, dar mai jos va-
#include "system.h"
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <string.h>
#include <math.h>
#include <libpic30.h> // http://microchip.wikidot.com/faq:74
#include <stdint.h>
#include <stdbool.h>
#include "GenericTypeDefs.h" // This has the 'BYTE' type definition
#include "SSD1306_LCD.h"
Exact la fel #include lista, doar diferite ordine.
Ei bine, a făcut-o pentru mine.
Atunci când vei ajunge eroare: implicit declarație de funcție
ar trebui, de asemenea, lista ofensatoare funcție. De multe ori această eroare se întâmplă din cauza unei uitat sau lipsește antet fișier, astfel încât de la shell prompt aveți posibilitatea să tastați man 2 functionname
si uita-te la REZUMAT
secțiune în partea de sus, ca această secțiune va lista orice fișiere antet care trebuie să fie incluse. Sau încercați http://linux.die.net/man/ Acest lucru este on-line paginile man sunt hyperlink și ușor pentru a căuta.
Funcțiile sunt adesea definite în fișierele header, inclusiv orice este necesar fișiere antet este de multe ori răspunsul. Ca cnicutar spus,
utilizați o funcție pentru care compilatorul nu a văzut-o declarația ("prototip") cu toate acestea.
Dacă aveți corect antete definit & utilizați un non GlibC
biblioteca (cum ar fi Musl C) gcc
va arunca, de asemenea, eroare: implicit declarație de funcție când GNU extensii, cum ar fi
malloc_trim` sunt întâlnite.
Soluția este de a încheia extensia & antet:
#if defined (__GLIBC__)
malloc_trim(0);
#endif
Cred că întrebarea nu este 100% a răspuns. Am fost în căutarea pentru o problemă cu lipsa de typeof(), care este timpul de compilare directivă.
Următoarele linkuri vă vor străluci lumină asupra situației:
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Typeof.html
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Alternate-Keywords.html#Alternate-Keywords
ca de conculsion încercați să utilizați __typeof__()
în loc. De asemenea, gcc ... -Dtypeof=__typeof__ ...
poate ajuta.