C - Règles de portée

Une portée dans toute programmation est une région du programme où une variable définie peut avoir son existence et au-delà de cette variable, elle ne peut pas être accédée. 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é local variables.

  • En dehors de toutes les fonctions appelées global variables.

  • Dans la définition des paramètres de fonction appelés formal paramètres.

Laissez-nous comprendre ce que local et global variables, et formal paramètres.

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 qui se trouvent à l'intérieur de cette fonction ou de ce bloc de code. Les variables locales ne sont pas connues pour fonctionner en dehors des leurs. L'exemple suivant montre comment les variables locales sont utilisées. Ici, toutes les variables a, b et c sont locales à la fonction main ().

#include <stdio.h>
 
int main () {

  /* local variable declaration */
  int a, b;
  int c;
 
  /* actual initialization */
  a = 10;
  b = 20;
  c = a + b;
 
  printf ("value of a = %d, b = %d and c = %d\n", a, b, c);
 
  return 0;
}

Variables globales

Les variables globales sont définies en dehors d'une fonction, généralement au-dessus du programme. Les variables globales conservent leurs valeurs pendant toute la durée de vie de votre programme et elles sont accessibles à l'intérieur de n'importe laquelle des fonctions définies pour le programme.

Une variable globale est accessible par n'importe quelle fonction. Autrement dit, une variable globale est disponible pour une utilisation dans tout votre programme après sa déclaration. Le programme suivant montre comment les variables globales sont utilisées dans un programme.

#include <stdio.h>
 
/* global variable declaration */
int g;
 
int main () {

  /* local variable declaration */
  int a, b;
 
  /* actual initialization */
  a = 10;
  b = 20;
  g = a + b;
 
  printf ("value of a = %d, b = %d and g = %d\n", a, b, g);
 
  return 0;
}

Un programme peut avoir le même nom pour les variables locales et globales mais la valeur de la variable locale à l'intérieur d'une fonction aura la préférence. Voici un exemple -

#include <stdio.h>
 
/* global variable declaration */
int g = 20;
 
int main () {

  /* local variable declaration */
  int g = 10;
 
  printf ("value of g = %d\n",  g);
 
  return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

value of g = 10

Paramètres formels

Les paramètres formels sont traités comme des variables locales dans une fonction et ont priorité sur les variables globales. Voici un exemple -

#include <stdio.h>
 
/* global variable declaration */
int a = 20;
 
int main () {

  /* local variable declaration in main function */
  int a = 10;
  int b = 20;
  int c = 0;

  printf ("value of a in main() = %d\n",  a);
  c = sum( a, b);
  printf ("value of c in main() = %d\n",  c);

  return 0;
}

/* function to add two integers */
int sum(int a, int b) {

   printf ("value of a in sum() = %d\n",  a);
   printf ("value of b in sum() = %d\n",  b);

   return a + b;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

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

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 initialisées automatiquement par le système lorsque vous les définissez comme suit -

Type de données Valeur par défaut initiale
int 0
carboniser «\ 0»
flotte 0
double 0
aiguille NUL

C'est une bonne pratique de programmation d'initialiser correctement les variables, sinon votre programme peut produire des résultats inattendus, car les variables non initialisées prendront une certaine valeur de garbage déjà disponible à leur emplacement mémoire.