Declaración implícita de función en C

Ammar Ali 12 octubre 2023
Declaración implícita de función en C

Este tutorial analiza la eliminación de la advertencia de declaración de función implícita declarando las funciones por encima de la función principal en C.

Declaración implícita de función en C

En ocasiones, el compilador muestra una advertencia de declaración implícita de la función en lenguaje C, lo que significa que la función no está declarada encima de la función main() o su archivo de cabecera no está incluido.

Por ejemplo, la función printf() pertenece al archivo de cabecera stdio.h, y si no la incluimos antes de usarla en un archivo fuente C, el compilador mostrará una advertencia de que la declaración de la función es implícita.

En este caso, tenemos que incluir el archivo de cabecera, que incluye la declaración de la función o declarar la función encima de la función main(). Por ejemplo, usemos la función printf() sin incluir su archivo de encabezado.

Vea el código a continuación.

int main() {
  int a = 10;
  printf("a = %d", a);
  return 0;
}

Producción :

main.c: In function 'main':
main.c:5:5: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
    5 |     printf("a = %d",a);
      |     ^~~~~~
main.c:5:5: warning: incompatible implicit declaration of built-in function 'printf'
main.c:1:1: note: include '<stdio.h>' or provide a declaration of 'printf'
  +++ |+#include <stdio.h>
    1 |
a = 10

En el resultado anterior, podemos ver que el compilador dio una advertencia diciendo que la declaración de la función printf() está implícita y tenemos que incluir el archivo <stdio.h>, o debemos proporcionar una declaración de la función printf() en el archivo fuente.

También podemos ver que se imprime el valor de a, lo que significa que la función printf() funcionó perfectamente aunque no hayamos incluido su archivo de cabecera.

Ahora, incluyamos el archivo de encabezado y repitamos el ejemplo anterior. Vea el código a continuación.

#include <stdio.h>

int main() {
  int a = 10;
  printf("a = %d", a);
  return 0;
}

Producción :

a = 10

Podemos ver arriba que la advertencia de la declaración implícita de la función no se muestra esta vez porque hemos incluido el archivo de encabezado para la función printf().

El aviso de declaración de función implícita también se mostrará si hemos creado una función en un archivo fuente pero no la hemos declarado encima de la función main().

El compilador advierte cuando tratamos de llamar a la función que la declaración de la función es implícita. Por ejemplo, vamos a crear una función y llamarla desde la función main() sin declararla encima de la función main().

#include <stdio.h>

int main() {
  int a = fun(2, 3);
  printf("a = %d", a);
  return 0;
}

int fun(int x, int p) {
  int a = x + p;
  return a;
}

Producción :

main.c: In function 'main':
main.c:4:13: warning: implicit declaration of function 'fun' [-Wimplicit-function-declaration]
    4 |     int a = fun(2, 3);
      |             ^~~
a = 5

En el resultado anterior, podemos ver que se muestra la advertencia para la función que creamos. Tenemos que declarar la función encima de la función main() para resolver este problema.

Por ejemplo, declaremos la función sobre la función main() y repitamos el ejemplo anterior. Vea el código a continuación.

#include <stdio.h>

int fun(int x, int p);
int main() {
  int a = fun(2, 3);
  printf("a = %d", a);
  return 0;
}

int fun(int x, int p) {
  int a = x + p;
  return a;
}

Producción :

a = 5

Podemos ver que la advertencia ya no está. También podemos declarar la función en un archivo de encabezado y luego incluir el archivo de encabezado en el archivo fuente, lo cual es útil en el caso de muchas funciones porque simplificará el código.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Artículo relacionado - C Function