next up previous contents index
suivant: Portée monter: main précédent: Construction d'algorithmes   Table des matières   Index


Global contre local

Un programme C++ est une liste de déclarations de noms d'entités (de fonctions, et éventuellement d'objets et de types). Ces noms, et les objets qu'ils désignent, sont dits globaux. Un nom déclaré à l'intérieur d'une fonction est dit local. Par exemple, dans :


int a = 3;

int f(int x) {
  int b = 4;
  ...
}

le nom de variable a est global, tandis que b est local (à f) ; le nom de fonction f est aussi global. Les fonctions d'un programme C++ sont nécessairement globales, contrairement à CAML qui permet de définir une fonction à l'intérieur d'une autre fonction. Par contre, les autres noms (variables, tableaux, types) peuvent être globaux ou locaux.

Les objets globaux sont alloués statiquement, au chargement du programme, avant que la fonction main ne commence son exécution. Les objets locaux déclarés static sont aussi alloués statiquement.

Les noms globaux assurent un rôle important, qui est la communication entre les différentes fonctions du programme. Pour des raisons d'organisation et de clarté des programmes, il est préférable de ne pas abuser des objets globaux. En effet, toute fonction est susceptible d'utiliser et surtout de modifier un objet global quelconque ; il faut lire tout le corps de la fonction pour savoir quels sont les objets globaux qui sont effectivement modifiés par la fonction, la déclaration de la fonction ne donnant aucune information à ce sujet.

D'autre part, l'accès des fonctions aux objets globaux en lecture et en écriture a pour conséquence que l'appel de fonction n'a pas un caractère applicatif. Pour certaines expressions, comme $x+y$, leur valeur ne dépend que de la valeur de leurs sous-expressions, ici $x$ et $y$ : c'est une évaluation applicative. Ce n'est pas le cas d'un appel de fonction quand la fonction à la fois utilise et modifie un objet global. Ainsi avec


int a = 3;                   // variable globale

int f(int x) {
  a = a+1;                  
  return x+a;
}

la valeur d'un appel f(n) ne dépend pas seulement de f et de n, mais aussi de l'état global : f(0) retourne successivement 4, 5, 6, etc.


next up previous contents index
suivant: Portée monter: main précédent: Construction d'algorithmes   Table des matières   Index
R Lalement