learn from c compiler-warnings

learn - c++ from zero



advertencia: declaración implícita de la función (6)

Creo que la pregunta no está 100% respondida. Estaba buscando un problema con la falta de 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 la conculsion intente usar __typeof__() lugar. También gcc ... -Dtypeof=__typeof__ ... puede ayudar.

Mi compilador (GCC) me está dando la advertencia:

advertencia: declaración implícita de la función

Por favor, ayúdame a entender por qué está por venir.


Cuando hagas tus #includes en main.c, pon la referencia #include al archivo que contiene la función referenciada en la parte superior de la lista de inclusión. por ejemplo, di que esto es main.c y tu 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 la función", pero a continuación lo hará:

#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 de #include, solo un orden diferente.

Bueno, lo hizo por mí.


Cuando obtiene el error: implicit declaration of function , también debe enumerar la función ofensiva. A menudo, este error ocurre debido a un archivo de cabecera olvidado o perdido, por lo que en el indicador del shell puede escribir man 2 functionname y mirar la sección SYNOPSIS en la parte superior, ya que esta sección enumerará los archivos de encabezado que deben incluirse. O intente http://linux.die.net/man/ Estas son las páginas man en línea con hipervínculos y son fáciles de buscar. Las funciones a menudo se definen en los archivos de encabezado, incluidos los archivos de encabezado necesarios a menudo es la respuesta. Como dijo Cnicutar,

Está utilizando una función para la cual el compilador aún no ha visto una declaración ("prototipo").


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) { /* ... */ }

Necesitas declarar tu función antes de main, así, directamente o en un encabezado:

int fun(int x, char *p);


La forma correcta es declarar prototipo de función en el encabezado.

Ejemplo

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 }


Si tiene los encabezados correctos definidos y está utilizando una biblioteca que no es de GlibC (como Musl C ), gcc también arrojará el error: implicit declaration of function cuando se encuentran extensiones de GNU como malloc_trim .

La solución es envolver la extensión y el encabezado :

#if defined (__GLIBC__) malloc_trim(0); #endif