Portée des variables locales

A chaque nom est associé une portée (scope) correspondant aux lignes depuis lesquelles ce nom est utilisable.

Notion de bloc

Un bloc est une portion de code délimitée par une paire d’accolades : { }. Les blocs sont organisés en hiérarchie car ils s’imbriquent. On désigne par bloc supérieur le bloc englobant le bloc courant et on parle de bloc inférieur ou de sous-bloc pour désigner un bloc contenu dans le bloc courant. Le bloc principal désigne le bloc de plus haut niveau. Voici un exemple :

../_images/blocs.png

Portée des variables

Les variables locales sont :

  • les variables définies dans un bloc

  • les paramètres d’une fonction,

  • les variables définies dans une boucle.

La portée d’une variable correspond aux lignes de code où cette variable peut être utilisée.

Variables définies dans un bloc

La portée d’une variable commence à sa définition et se termine à la fin du bloc où elle a été créée.

Ainsi, le nom d’une variable est accessible dans les sous-blocs présents sur sa portée. Il est impossible d’utiliser une variable locale à l’extérieur de sa portée, d’où son caractère local.

Voici un exemple :

../_images/portee_1.png

Avertissement

Le langage C++ autorise la définition d’une variable portant le même nom que la variable d’un bloc supérieur. Dans ce cas, la nouvelle variable masque le nom de la variable du bloc supérieur. Cependant, cette situation doit être évitée absolument car avoir des conflits de nom dans une fonction est une source de problèmes.

Variable définie en tant que paramètre de fonction

La portée d’un paramètre d’une fonction correspond au bloc de cette fonction. Voici un exemple :

../_images/param.png

Variable définie dans une boucle

La portée d’une variable définie dans une instruction for commence à sa définition et se termine à la fin du bloc associé à la boucle for.

../_images/for.png

Dans cet exemple, la première instruction int i = 0; a pour effet de définir la variable i. Lorsque la première itération se termine, l’incrémentation puis la comparaison peuvent être effectuées sur i car nous sommes toujours dans la portée de cette variable.

Exercices

Dans cet exercice, on suppose que la méthode Afficher() existe et qu’elle prend un entier en paramètre. Le code ci-dessous contient 3 erreurs, donnez leurs numéros de ligne séparés par des espaces.

 1void Toto(int a, int b)
 2{
 3        int z = 7;
 4        for (int i = 0; i < b; i++)
 5        {
 6                int d = 11;
 7                Afficher(d + a);
 8        }
 9        for (i = 0; i < b; i++)
10        {
11                int e = 11;
12                Afficher(e + d);
13        }
14        Afficher(a);
15        Afficher(z);
16        Afficher(e);
17}

Les numéros de lignes contenant les erreurs sont