Portée

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Déclarations - Index

La portée d'un identificateur est la partie du programme dans laquelle il est possible d'accéder à son objet. Il existe six catégories de portée : bloc (ou locale), fonction, prototype de fonction, fichier, classe (C++ uniquement) et espace de nommage (C++ uniquement). Elles dépendent du mode et du lieu de déclaration des identificateurs.

  • Bloc. La portée bloc, ou locale, d'un identificateur commence au point de déclaration et se termine à la fin du bloc contenant la déclaration (on parle de bloc englobant). Les déclarations de paramètres d'une définition de fonction ont aussi une portée locale, limitée au bloc qui définit la fonction.
  • Fonction. Les seuls identificateurs qui ont une portée fonction sont les étiquettes d'instruction. Les noms d'étiquettes sont utilisables avec les instructions goto en tout point de la fonction dans laquelle l'étiquette est déclarée. Les étiquettes sont déclarées implicitement par l'écriture du nom_label : suivi d'une instruction. Les noms d'étiquette doivent être uniques au sein d'une même fonction.
  • Prototype de fonction. Les identificateurs déclarés dans la liste des paramètres d'un prototype de fonction (qui ne font pas partie de la définition de la fonction) ont une portée prototype de fonction. Cette portée se termine à la fin du prototype de fonction.
  • Fichier. Les identificateurs ayant une portée fichier, appelés identificateurs globaux, sont déclarés en dehors des blocs et des classes. Leur portée part du point de déclaration et se termine à la fin du fichier contenant cette déclaration.
  • Classe (C++). Une classe est un ensemble nommé de membres, comprenant des structures de données et des fonctions qui agissent sur celles-ci. La portée classe s'applique aux noms des membres d'une classe particulière. Les classes et les objets obéissent à plusieurs règles spécifiques d'accès et de portée ; voir la rubrique Classes.
  • Condition (C++). Il est possible d'effectuer des déclarations à l'intérieur de conditions. Des variables peuvent être déclarées dans l'expression des instructions if, while et switch. La portée de la variable est celle de l'instruction. Dans le cas d'une instruction if, la variable se trouve également dans la portée du bloc else.
  • Espace de nommage (C++). Un espace de nommage est un regroupement logique d'entités de programme (identificateurs, classes et fonctions). Les espaces de nommage sont ouverts, c'est-à-dire qu'ils peuvent s'étendre sur plusieurs unités de compilation. Vous pouvez considérer un espace de nommage comme une portée de nommage, comparable en de nombreux points à une classe en C++. Voir le mot-clé namespace dans l'aide pour de plus amples informations sur la façon de déclarer et d'utiliser les espaces de nommage.

Espaces de nommage

L'espace de nommage correspond à la portée à l'intérieur de laquelle un identificateur doit être unique. Remarquez qu'un espace de nommage en C++ étend ce concept en vous autorisant à donner un nom à la portée. Outre la capacité de C++ à nommer les portées, le langage C utilise quatre catégories distinctes d'identificateurs :

  • Les noms d'étiquette goto. Ils doivent être uniques au sein de la fonction dans laquelle ils sont déclarés.
  • Les noms de structure, d'unions et d'énumérations. Ils doivent être uniques dans le bloc où ils sont définis. Les noms déclarés hors de toute fonction doivent être uniques.
  • Les noms de membres de structures et d'unions. Ils doivent être uniques dans la structure ou dans l'union où ils ont été définis. Il n'y a pas de restriction quant au type ou à la position des membres ayant le même nom dans des structures différentes.
  • Les variables, les typedef, les fonctions et les membres d'énumération. Ils doivent être uniques au sein de la portée dans laquelle ils ont été définis. Les identificateurs déclarés en externe doivent être uniques parmi les variables déclarées de façon externe.

Voir aussi