Règles très importantes
R1 : C'est la déclaration la plus locale de l'identificateur qui est dominante et qu'il faut considérer en un point d'observation donné.
R2 : un identificateur est connu au sein du bloc où se trouve sa déclaration ET dans tous les blocs inclus dans le bloc où se trouve sa déclaration.
C'est un exemple qui utilise uniquement le bloc principal de la fonction main Code :
1 --> #include < stdio.h >
2 --> int un_entier = -3; // déclaration d'une variable globale (VG)
3 --> void main()
4 --> { /* p1 */
5 --> char carac; // déclaration de la variable locale à la fonction main "carac" (VL)
6 --> /* p2 */
7 --> carac = getchar();
8 --> un_entier = 1; /* p3 */
9 --> printf("\nle caractere est %c et l'entier est %d\n",carac,un_entier);
10--> /* p4 */ }
Nous supposerons que l'utilisateur tape 'A'.
Voici le contenu des quadruplets aux points p1, p2, p3, p4:
Explications
Au point p1, seule la variable globale 'un_entier' est déclarée et est visible, la variable dont l'identificateur est 'carac' n'est pas encore définie, elle est non visible. Une variable globale est définie et visible partout à partir de l'emplacement où elle est déclarée.
Au point p2, l'identificateur de variable 'carac' est défini mais la variable n'a pas de valeur, elle n'a pas encore été initialisée.
Au point p3, 'un_entier' vient d'être modifié et 'carac' aussi.
Au point p4, juste avant de sortir du programme, les variables conservent l'état précédent, elles ont juste été affichées.