1. Qu’est‑ce que extern ?
Dans le langage C, extern est un mot‑clé qui indique que vous « empruntez » une variable ou une fonction qui a été définie dans un autre fichier. Par exemple, si vous voulez utiliser une variable globale définie dans un fichier depuis un autre fichier, vous utiliserez extern. Lorsque le programme est réparti sur plusieurs fichiers, extern permet de partager les données entre eux.
Imaginez votre programme comme une maison avec de nombreuses pièces, et extern comme un « accord d’emprunt » qui vous permet d’utiliser un outil provenant de la pièce voisine. Cela signifie : « Cet élément n’est pas ici, mais vous pouvez le trouver dans un autre fichier. »
Exemple
// file1.c
int g_data = 100;
// file2.c
extern int g_data;
void printData() {
printf("%d\n", g_data); // Accesses g_data defined in file1.c
}
Dans cet exemple, g_data est défini dans file1.c, et grâce à extern, file2.c peut accéder à cette variable.

2. Relation entre extern et les variables globales
extern est étroitement lié aux variables globales. Une variable globale, une fois définie, peut être accédée depuis n’importe quel fichier du programme. Cependant, les autres fichiers ne connaissent pas automatiquement son existence. C’est là qu’intervient extern : il indique aux autres fichiers « Hey, cette variable existe ailleurs ! »
Un point important à retenir : extern n’est qu’une déclaration, pas une définition. Il n’alloue pas de mémoire. La mémoire réelle de la variable est allouée dans le fichier d’origine où elle est définie.
Exemple de variable globale
// file1.c
int counter = 0;
// file2.c
extern int counter; // Refers to counter defined in another file
void incrementCounter() {
counter++; // Updates the value of counter
}
3. Utilisation de extern dans les fichiers d’en‑tête
Dans les projets de grande envergure, déclarer à répétition des variables ou des fonctions dans chaque fichier peut devenir fastidieux. C’est là que les fichiers d’en‑tête (header) sont utiles. Un fichier d’en‑tête constitue un endroit centralisé où stocker les informations à partager entre plusieurs fichiers. En plaçant les déclarations extern dans un fichier d’en‑tête, vous facilitez la référence aux mêmes variables ou fonctions globales depuis les autres fichiers.
Vous pouvez considérer un fichier d’en‑tête comme une « boîte à outils » pour l’ensemble du projet. Il regroupe les outils partagés en un seul lieu, de sorte que les autres fichiers n’ont qu’à l’inclure pour les utiliser.
Exemple de fichier d’en‑tête
// globals.h
extern int global_variable;
void printGlobalVariable();
// file1.c
#include "globals.h"
int global_variable = 10;
// file2.c
#include "globals.h"
void printGlobalVariable() {
printf("%d\n", global_variable);
}

4. Erreurs courantes avec extern
Il y a quelques points importants à garder à l’esprit lorsqu’on utilise extern. Par exemple, vous ne pouvez pas initialiser une variable avec extern. En effet, extern n’est qu’une déclaration — pas une définition. De plus, si vous déclarez une variable avec extern dans un fichier où la définition réelle n’existe pas, le programme générera une erreur d’édition de liens.
Erreur typique
extern int data = 100; // Initialization is not allowed here
Comme le montre l’exemple ci‑dessus, essayer d’initialiser une variable avec extern provoquera une erreur. extern sert à référencer une variable définie dans un autre fichier, pas à la définir ou l’initialiser.
5. Cas d’utilisation pratiques de extern
extern est particulièrement utile dans les projets de grande taille. Par exemple, dans des programmes qui s’étendent sur plusieurs modules, vous pouvez déclarer des données ou des fonctions partagées à l’aide de extern et les réutiliser dans différents fichiers.
Cette approche favorise la modularité de votre programme, rendant la base de code plus facile à maintenir et à comprendre. Chaque fichier peut fonctionner de façon indépendante tout en partageant les données nécessaires grâce aux déclarations extern.
Exemple pratique
// main.c
#include "globals.h"
int main() {
printGlobalVariable(); // Calls a function defined in another file
return 0;
}
// globals.c
#include "globals.h"
int global_variable = 100;
void printGlobalVariable() {
printf("%d\n", global_variable); // Prints the global variable
}
Cet article a couvert tout, des bases de extern à son utilisation pratique. Comprendre le fonctionnement de extern est essentiel pour diviser et réutiliser le code en programmation C.



