next up previous contents
Next: Liaison dynamique Up: Associer les noms aux Previous: Caractéristiques des objets :

Portée lexicale

La déclaration d'un nom introduit une association (binding) de ce nom, qui définit un nouvel usage de ce nom. Toutes les occurrences de ce nom qui correspondent à cette association sont dans la portée de cette association. Les règles de portée du langage permettent d'associer une occurrence d'un nom à sa déclaration. Quand on dit qu'un nom x est visible à un point du programme, c'est un abus de langage pour dire que le nom x est dans la portée d'une association de ce nom (une déclaration de ce nom).gif

Un objet (mais aussi classe, fonction ou énumération) doit être dans la portée d'exactement une seule définition (mais éventuellement de plusieurs déclarations).

En C++, il existe essentiellement quatre types de portée :

Une déclaration (ou définition) locale ou interne à un classe pourra occulter une autre déclaration (ou définition) locale. Un nom est toujours associé à la déclaration la plus ``proche'' syntaxiquement.gif

L'opérateur :: permet d'accéder à des noms normalement hors de portée:

int a;
class A{
  int a;
public: 
  void f(int);
};
void A::f(int i) { // f dans la portée de la classe A
  a = ::a;         // affecte le a dans la portée de la classe
                   // par le a de la portée globale
}

En ce qui concerne les noms de variables, d'après ce qui précède, il n'existe que deux niveaux, local pour les variables déclarées dans le bloc, et global ; comme il n'existe pas en C++ de fonctions locales à d'autres fonctions, le problème de l'environnement d'appel des fonctions est très simple. La règle de la portée lexicalegif, indique que les noms qui ne sont pas locaux sont évalués dans l'environnement lexical. L'accès aux noms, en C++ et en C, est donc très simple (et efficace) : il y a d'une part les noms locaux qui seront alloués sur la pile d'exécution, et les nom globaux qui seront alloués dans la zone de données statiques.


next up previous contents
Next: Liaison dynamique Up: Associer les noms aux Previous: Caractéristiques des objets :


Mon Oct 20 14:02:48 MET 1997