Il mio compilatore (GCC) mi sta dando l'avvertimento:
avvertenza: dichiarazione di funzione implicita
Per favore, aiutami a capire perché sta arrivando.
Il mio compilatore (GCC) mi sta dando l'avvertimento:
avvertenza: dichiarazione di funzione implicita
Per favore, aiutami a capire perché sta arrivando.
Risposte:
Stai utilizzando 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)
{
/* ... */
}
Devi dichiarare la tua funzione prima di main, in questo modo, direttamente o in un'intestazione:
int fun(int x, char *p);
Il modo giusto è dichiarare il prototipo di funzione nell'intestazione.
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 file (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Quando esegui #includes in main.c, inserisci il riferimento #include nel file che contiene la funzione di riferimento nella parte superiore dell'elenco include. es. Dì che questo è main.c e la tua funzione di riferimento è in "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
Quanto sopra non genererà l'errore "dichiarazione implicita di funzione", ma sotto
#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"
Esattamente lo stesso elenco #include, solo un ordine diverso.
Bene, lo ha fatto per me.
Quando lo ottieni error: implicit declaration of function
dovrebbe anche elencare la funzione offensiva. Spesso questo errore si verifica a causa di un file di intestazione dimenticato o mancante, quindi al prompt della shell è possibile digitare man 2 functionname
e guardare la SYNOPSIS
sezione in alto, poiché questa sezione elencherà tutti i file di intestazione che devono essere inclusi. Oppure prova http://linux.die.net/man/ Queste sono le pagine man online che sono hyperlink e facili da cercare. Le funzioni sono spesso definite nei file di intestazione, incluso qualsiasi file di intestazione richiesto è spesso la risposta. Come ha detto cnicutar,
Stai utilizzando una funzione per la quale il compilatore non ha ancora visto una dichiarazione ("prototipo").
Se hai le intestazioni corrette definite e stai usando una non GlibC
libreria (come Musl C ), gcc
verrà lanciata anche error: implicit declaration of function
quando malloc_trim
si incontrano estensioni GNU come quelle .
La soluzione è avvolgere l'estensione e l'intestazione :
#if defined (__GLIBC__)
malloc_trim(0);
#endif
Penso che la domanda non abbia una risposta al 100%. Stavo cercando un problema con typeof () mancante, che è la direttiva del tempo di compilazione.
I seguenti collegamenti faranno luce sulla situazione:
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
a partire dalla conculsione, cerca di usare __typeof__()
invece. Inoltre gcc ... -Dtypeof=__typeof__ ...
può aiutare.