Variables locales et globales en langage C
Une portée dans n'importe quel langage de programmation est une région du programme dans laquelle une variable définie peut avoir son existence et au-delà, l'accès à la variable est impossible. Il y a trois endroits où les variables peuvent être déclarées en langage de programmation C.
- À l'intérieur d'une fonction ou d'un bloc, appelées variables locales.
- En dehors de toutes les fonctions, appelées variables globales.
- Dans la définition des paramètres de fonction appelés paramètres formels.
Variables locales
Les variables déclarées à l'intérieur d'une fonction ou d'un bloc sont appelées variables locales. Ils ne peuvent être utilisés que par des instructions contenues dans cette fonction ou ce bloc de code. Les variables locales ne sont pas connues pour les fonctions en dehors de leurs portées.
Exemple 1 :
void fonction_1() { int a, b; // vous pouvez utiliser a et b entre accolades seulement } void fonction_2() { printf("%d\n", a); // ERREUR, fonction_2() ne connait aucune variable a }
a et b sont appelés variables locales. elles sont disponibles uniquement dans la fonction dans laquelle elles sont définies (dans ce cas fonction_1()). Si vous essayez d'utiliser ces variables en dehors de la fonction dans laquelle elles sont définies, vous obtiendrez une erreur.
Un autre point important est que les variables a et b n'existent que jusqu'à l'exécution de fonction_1(). Dès que la fonction fonction_1() termine les variables a et b sont détruites.
Variables globales
Les variables globales sont définies en dehors d'une fonction, généralement en haut du programme. Les variables globales conservent leurs valeurs tout au long de la vie de votre programme et sont accessibles dans n'importe quelle fonction définie dans le programme.
Exemple 2 :
#include< stdio.h> int a; // variable global void fonction_1() { printf("Fonction 1"); a=5; printf("a=%d",a); } void fonction_2() { printf("Fonction 2"); printf("%d\n", a); } int main(void){ fonction_1(); fonction_2(); printf("bye"); return 0; }
a = 5
Fonction 2
a = 5
bye
Un programme peut avoir le même nom pour les variables locales et globales, mais la valeur de la variable locale dans une fonction aura la priorité.
Exemple 3 :
#include< stdio.h> int a; // variable global void fonction_1() { int a=3; printf("Fonction 1"); printf("a=%d",a); } void fonction_2() { printf("Fonction 2"); printf("%d\n", a); } int main(void){ fonction_1(); fonction_2(); printf("bye"); return 0; }
a = 3
Fonction 2
a = 0
bye
Paramètres formels
Les paramètres formels sont traités comme des variables locales au sein d'une fonction et ils ont la priorité sur les variables globales.
Exemple 3 :
#include< stdio.h> int a; // variable global void fonction_1(int a) { a=3; printf("Fonction 1"); printf("a=%d",a); } void fonction_2() { printf("Fonction 2"); printf("%d\n", a); } int main(void){ fonction_1(a); fonction_2(); printf("bye"); return 0; }
a = 3
Fonction 2
a = 0
bye
Initialisation des variables locales et globales
Lorsqu'une variable locale est définie, elle n'est pas initialisée par le système, vous devez l'initialiser vous-même. Les variables globales sont automatiquement initialisées par le système lorsque vous les définissez comme suit :
Type de données | Valeur par défaut initiale |
---|---|
int | 0 |
char | '\0' |
float | 0 |
double | 0 |
pointeur | NULL |
C'est une bonne pratique de programmation d'initialiser les variables correctement. Dans le cas contraire, votre programme pourrait produire des résultats inattendus, car les variables non initialisées prendront une valeur inattendue(garbage value) déjà disponible à leur emplacement mémoire.