C Règles de portée

Dans tout type de programmation, la portée est la zone dans laquelle existent les variables définies dans un programme ; au-delà de cette zone, les variables ne sont pas accessibles. En langage C, il existe trois endroits où les variables peuvent être déclarées :

  1. À l'intérieur d'une fonction ou d'un bloclocaleVariable
  2. En dehors de toutes les fonctionsglobaleVariable
  3. Dansle formulaireDans les définitions des paramètres de fonction

Regardons ce que sontles variables locales,les variables globalesetle formulaireparamètres.

Variables locales

Les variables déclarées à l'intérieur d'une fonction ou d'un bloc sont appelées variables locales. Elles ne peuvent être utilisées que par les instructions à l'intérieur de cette fonction ou de ce bloc de code. Les variables locales ne sont pas connues en dehors de la fonction. Voici un exemple d'utilisation de variables locales. Ici, toutes les variables a, b et c sont des variables locales de la fonction main().

Exemple

#include <stdio.h> int main () { /*Déclaration de variable locale*/ int a, b; int c; /*initialisation réelle*/ a = 10; b = 20; c = a + b; printf ("valeur de a = %d, b = %d et c = %d\n", a, b, c); return 0; }

Variables globales

Les variables globales sont définies en dehors des fonctions, généralement au début du programme. Les variables globales restent valides tout au long du cycle de vie du programme et sont accessibles à l'intérieur de n'importe quelle fonction.

Les variables globales sont accessibles par n'importe quelle fonction. C'est-à-dire qu'après la déclaration d'une variable globale, elle est disponible dans tout le programme. Ce qui suit est un exemple d'utilisation de variables globales et locales :

Exemple

#include <stdio.h> /*Déclaration de variable globale*/ int g; int main () { /*Déclaration de variable locale*/ int a, b; /*initialisation réelle*/ a = 10; b = 20; g = a + b; printf ("valeur de a = %d, b = %d et g = %d\n", a, b, g); return 0; }

Dans un programme, les variables locales et les variables globales peuvent avoir le même nom, mais à l'intérieur d'une fonction, si deux noms sont identiques, la valeur de la variable locale est utilisée, et la variable globale n'est pas utilisée. Voici un exemple :

Dans un programme, les variables locales et les variables globales

Exemple

#include <stdio.h> /*Déclaration de variable globale*/ int g = 20; int main () { /*Déclaration de variable locale*/ int g = 10; printf ("valeur de g = %d\n", g); return 0; }

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

value of g = 10

Paramètres formels

Les paramètres de fonction, c'est-à-dire les paramètres formels, sont traités comme des variables locales dans cette fonction, et s'ils ont le même nom que les variables globales, ils sont prioritaires. Voici un exemple :

Exemple

#include <stdio.h> /*Déclaration de variable globale*/ int a = 20; int main () { /*Déclarations de variables locales dans la fonction main*/ int a = 10; int b = 20; int c = 0; int sum(int, int); printf ("valeur de a dans main() = %d\n", a); c = sum( a, b); printf ("valeur de c dans main() = %d\n", c); return 0; } /*Fonction pour additionner deux entiers*/ int sum(int a, int b) { printf ("valeur de a dans sum() = %d\n", a); printf ("valeur de b dans sum() = %d\n", b); return a + b; }

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30

La différence entre les variables globales et les variables locales en mémoire:

  • Les variables globales sont stockées dans la zone de stockage globale de la mémoire, occupant des unités de stockage statiques ;
  • Les variables locales sont stockées dans la pile, et ce n'est que lorsque la fonction dans laquelle elles se trouvent est appelée que des unités de stockage sont allouées dynamiquement pour les variables.

Pour plus d'informations, voir :Utilisation de static en C/C++ : variables globales et variables locales

Initialisation des variables locales et globales

Lorsqu'une variable locale est définie, le système ne l'initialise pas ; vous devez l'initialiser vous-même. Lors de la définition d'une variable globale, le système l'initialise automatiquement, comme montré ci-dessous :

Types de donnéesInitialiser les valeurs par défaut
int 0
char '\0'
float 0
double 0
pointeur NULL

Initialiser correctement les variables est une bonne pratique de programmation ; sinon, le programme peut parfois produire des résultats inattendus, car des variables non initialisées peuvent entraîner des valeurs parasites déjà présentes dans des emplacements mémoire.

autres extensions