Déclaration implicite de fonction en C

Ammar Ali 12 octobre 2023
Déclaration implicite de fonction en C

Ce didacticiel explique comment supprimer l’avertissement de déclaration de fonction implicite en déclarant les fonctions au-dessus de la fonction principale en C.

Déclaration implicite de fonction en C

Parfois, le compilateur affiche un avertissement de déclaration implicite de la fonction en langage C, ce qui signifie que la fonction n’est pas déclarée au-dessus de la fonction main() ou que son fichier d’en-tête n’est pas inclus.

Par exemple, la fonction printf() appartient au fichier d’en-tête stdio.h, et si nous ne l’incluons pas avant de l’utiliser dans un fichier source C, le compilateur affichera un avertissement indiquant que la déclaration de la fonction est implicite.

Dans ce cas, nous devons inclure le fichier d’en-tête, qui inclut la déclaration de fonction ou déclarer la fonction au-dessus de la fonction main(). Par exemple, utilisons la fonction printf() sans inclure son fichier d’en-tête.

Voir le code ci-dessous.

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

Production:

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

Dans la sortie ci-dessus, nous pouvons voir que le compilateur a donné un avertissement disant que la déclaration de la fonction printf() est implicite et que nous devons inclure le fichier <stdio.h>, ou nous devons fournir une déclaration de la fonction printf() dans le fichier source.

Nous pouvons également voir que la valeur de a est imprimée, ce qui signifie que la fonction printf() a parfaitement fonctionné même si nous n’avons pas inclus son fichier d’en-tête.

Maintenant, incluons le fichier d’en-tête et répétons l’exemple ci-dessus. Voir le code ci-dessous.

#include <stdio.h>

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

Production:

a = 10

Nous pouvons voir ci-dessus que l’avertissement de la déclaration de fonction implicite n’est pas affiché cette fois car nous avons inclus le fichier d’en-tête pour la fonction printf().

L’avertissement de déclaration de fonction implicite sera également affiché si nous avons créé une fonction dans un fichier source mais ne l’avons pas déclarée au-dessus de la fonction main().

Le compilateur avertit lorsque nous essayons d’appeler la fonction que la déclaration de la fonction est implicite. Par exemple, créons une fonction et appelons-la depuis la fonction main() sans la déclarer au-dessus de la fonction 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;
}

Production:

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

Dans la sortie ci-dessus, nous pouvons voir que l’avertissement est affiché pour la fonction que nous avons créée. Il faut déclarer la fonction au-dessus de la fonction main() pour résoudre ce problème.

Par exemple, déclarons la fonction au-dessus de la fonction main() et répétons l’exemple ci-dessus. Voir le code ci-dessous.

#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;
}

Production:

a = 5

Nous pouvons voir que l’avertissement a maintenant disparu. On peut aussi déclarer la fonction dans un fichier d’en-tête puis inclure le fichier d’en-tête dans le fichier source, ce qui est utile dans le cas de nombreuses fonctions car cela simplifiera le code.

Auteur: 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

Article connexe - C Function