Mi compilador (GCC) me está dando la advertencia:
advertencia: declaración implícita de función
Por favor, ayúdame a entender por qué viene.
Mi compilador (GCC) me está dando la advertencia:
advertencia: declaración implícita de función
Por favor, ayúdame a entender por qué viene.
Respuestas:
Está utilizando una función para la cual el compilador aún no ha visto una declaración (" prototipo ").
Por ejemplo:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Debe declarar su función antes de main, como esta, ya sea directamente o en un encabezado:
int fun(int x, char *p);
La forma correcta es declarar el prototipo de la función en el encabezado.
main.h
#ifndef MAIN_H
#define MAIN_H
int some_main(const char *name);
#endif
C Principal
#include "main.h"
int main()
{
some_main("Hello, World\n");
}
int some_main(const char *name)
{
printf("%s", name);
}
Alternativa con un archivo (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Cuando realice sus #includes en main.c, coloque la referencia #include en el archivo que contiene la función referenciada en la parte superior de la lista de inclusión. por ejemplo, digamos que esto es main.c y su función referenciada está en "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
Lo anterior no generará el error de "declaración implícita de función", pero a continuación sí:
#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"
Exactamente la misma lista #include, solo un orden diferente.
Bueno, lo hizo por mi.
Cuando obtenga el error: implicit declaration of function
también debe enumerar la función infractora. A menudo, este error ocurre debido a un archivo de encabezado olvidado o faltante, por lo que en el indicador de shell puede escribir man 2 functionname
y mirar la SYNOPSIS
sección en la parte superior, ya que esta sección enumerará todos los archivos de encabezado que deben incluirse. O pruebe http://linux.die.net/man/. Estas son las páginas man en línea que tienen hipervínculos y son fáciles de buscar. Las funciones a menudo se definen en los archivos de encabezado, incluso cualquier archivo de encabezado requerido es a menudo la respuesta. Como dijo cnicutar:
Está utilizando una función para la cual el compilador aún no ha visto una declaración ("prototipo").
Si tiene los encabezados correctos definidos y está utilizando una GlibC
biblioteca que no sea (como Musl C ) gcc
, también se lanzará error: implicit declaration of function
cuando malloc_trim
se encuentren extensiones GNU como .
La solución es envolver la extensión y el encabezado :
#if defined (__GLIBC__)
malloc_trim(0);
#endif
Creo que la pregunta no está 100% respondida. Estaba buscando un problema con falta typeof (), que es la directiva de tiempo de compilación.
Los siguientes enlaces arrojarán luz sobre la situación:
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 partir de conculsion intenta utilizar __typeof__()
en su lugar. También gcc ... -Dtypeof=__typeof__ ...
puede ayudar