Déclaration et déclarateurs

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Syntaxe de déclaration - Index

Une déclaration est une liste de noms. Les noms sont parfois référencés comme des déclarateurs ou des identificateurs. La déclaration commence par des spécificateurs de classe de stockage, des spécificateurs de type et autres modificateurs facultatifs. Les identificateurs sont séparés par des virgules, et la liste se termine par un point-virgule.

Les déclarations simples d'identificateurs de variables se présentent comme suit :

type-de-données var1 <=init1>, var2 <=init2>, ...;

var1, var2,... est une séquence d'identificateurs avec, facultativement, des valeurs d'initialisation. Chaque variable est déclarée du type type-de-données. Par exemple :

int x = 1, y = 2;

crée deux variables entières x et y (qui sont initialisées respectivement à 1 et à 2).

Ce sont des définitions ; l'espace mémoire est réservé et les valeurs d'initialisation, s'il y a lieu, sont appliquées.

La valeur d'initialisation pour un objet automatique peut être n'importe quelle expression légale qui a pour résultat une valeur d'affectation compatible avec le type de la variable en question. Les valeurs d'initialisation pour les objets statiques doivent être des constantes ou des expressions constantes.

En C++, une valeur d'initialisation pour un objet statique peut être toute expression intégrant des constantes, des variables déjà déclarées et des fonctions.

Le format du déclarateur indique le mode d'interprétation du nom déclaré lorsqu'il est utilisé dans une expression. Si type est un type quelconque, si le spécificateur-classe-stockage est un spécificateur de classe de stockage quelconque et si D1 et D2 sont deux déclarateurs, la déclaration :

spécificateur-classe-stockage type D1, D2;

indique que chaque occurrence de D1 ou D2 dans une expression sera traitée comme un objet de type type et dont la classe de stockage est celle mentionnée par spécificateur-classe-stockage. Le type de nom dans le déclarateur sera une phrase contenant type, comme une fonction "pointeur sur type", "tableau de type" "type" renvoyant type" ou "pointeur sur fonction renvoyant type", etc.

Par exemple, dans les exemples de syntaxes de déclarations suivants, chaque déclarateur est utilisable comme rvalue (ou comme lvalue dans certains cas) dans les expressions où un objet unique int aurait sa place. Les types d'identificateurs imbriqués sont dérivés de leurs déclarateurs, de la façon suivante :

Exemples de syntaxes de déclarations

Syntaxe du déclarateur Type impliqué de nom Exemple

type nom;

type

int compte;

type nom[];

tableau (ouvert) de type

int compte[];

type nom[3];

Tableau fixe de trois éléments, tous de type
(nom[0], nom[1] etnom[2])

int compte[3];

type *nom;

Pointeur sur type

int *compte;

type *nom[];

tableau (ouvert) de pointeurs sur type

int *compte[];

type *(nom[]);

Idem

int *(compte[]);

type (*nom)[];

Pointeur sur un tableau (ouvert) de type

int (*compte) [];

type &nom;

Référence de type (C++ seulement)

int &compte;

type nom();

Fonction renvoyant type

int compte();

type *nom();

Fonction renvoyant un pointeur sur type

int *compte();

type *(nom());

Idem

int *(compte());

type (*nom)();

Pointeur sur une fonction renvoyant type

int (*compte) ();


Notez la nécessité des parenthèses dans (*nom)[] et (*nom)() puisque la priorité du déclarateur de tableau [ ] et du déclarateur de fonction ( ) est supérieure à celle du déclarateur de pointeur *. Les parenthèses dans *(nom[]) sont facultatives.

Remarque : Voir la rubrique Syntaxe des déclarations Appmethod C++ pour la syntaxe des déclarateurs. La définition couvre à la fois les déclarateurs d'identificateur et de fonction.

Voir aussi