En C, les variables peuvent avoir différentes portées : locale (dans un bloc), globale (dans tout le fichier) et portée au niveau du fichier (static). Une gestion appropriée des portées est importante pour la prévisibilité du fonctionnement et pour éviter les conflits de noms.
Visibles dans toutes les fonctions du fichier et, si déclarées avec extern, dans tout le projet.
Créées à l'entrée d'un bloc (par exemple, une fonction ou une boucle). Invisibles en dehors du bloc de déclaration.
static int foo; — uniquement pour le fichier actuel.
Exemple :
static int counter = 0; // Seulement à l'intérieur du fichier void increment() { int temp = 10; // variable locale ++counter; }
Si les variables globales et locales ont le même nom, laquelle est utilisée à l'intérieur de la fonction et pourquoi ?
Réponse : La variable locale est utilisée, car elle "masque" (shadowing) le nom global à l'intérieur de sa portée. La variable globale reste accessible en dehors du bloc de déclaration de la variable locale.
Exemple :
int value = 5; void foo() { int value = 10; printf("%d", value); // affichera 10, pas 5 }
Histoire
Histoire
static pour une fonction auxiliaire et une variable, ce qui a entraîné des conflits de noms lors du linkage, ainsi que des erreurs imprévisibles lors de l'assemblage de différentes parties du projet.Histoire
Il y a eu des cas où des variables globales étaient utilisées dans du code multithread sans la synchronisation adéquate. En raison de la portée implicite et de l'inattention lors de la modification de la valeur dans différents threads, des courses de données (data race) se produisaient.