Next: En pratique
Up: Les déclarations
Previous: Sémantique des déclarations
La syntaxe et la sémantique des déclarations ne sont pas faciles à
appréhender dans le langage C pour les raisons que nous allons développer.
Tout d'abord, l'ordre des éléments d'une déclaration est assez peu
naturel.
Au lieu d'avoir comme en
PASCAL, une déclaration
c : char;
qu'on peut traduire par << c est de type char >>, on a en C :
char c;
qu'il faut traduire par << de type char est c >>, ce qui est une inversion
peu naturelle.
Ensuite, l'identificateur qui est le nom de l'objet déclaré, au lieu d'être
mis en évidence dans la déclaration, est caché au beau milieu du
déclarateur.
Exemple :
char **p[10];
D'autre part,
le langage C fait partie des langages qui permettent au programmeur, à partir
de types de base et de constructeurs de type, de construire des types
complexes.
Du point de vue du programmeur, il existe dans le langage les constructeurs
suivants :
- -
- * pour les pointeurs ;
- -
- [ ] pour les tableaux ;
- -
- ( ) pour les fonctions ;
- -
- struct pour les structures ;
- -
- union pour les unions.
Alors que le programmeur serait en droit de s'attendre à ce que tous ces
constructeurs soient traités de manière homogène, en fait, les trois
premiers sont des
déclarateur alors que les deux derniers sont des
spécificateur-de-type.
Autre point ajoutant encore à la confusion, le constructeur * est
un constructeur préfixé alors que les constructeurs [ ] et ( )
sont postfixé, et le constructeur * a une priorité différente de
celle des deux autres.
Ceci à la conséquence extrêmement désagréable, qu'un type complexe
écrit en C ne peut pas se lire de la gauche vers la droite, mais peut
nécessiter un analyse du type de celle que l'on fait pour comprendre
une expression mathématique.
Par exemple, qui pourrait dire du premier coup d'
il quel est le type
de f dans la déclaration ci-dessous9.1 :
char (*(*f())[])()
Next: En pratique
Up: Les déclarations
Previous: Sémantique des déclarations
Bernard Cassagne
1998-12-09