Programmer en langage C
38
© Éditions Eyrolles
En revanche, il n’est pas possible de faire apparaître une expression comme premier opérande
de cet opérateur =. Ainsi, l’expression suivante n’aurait pas de sens :
c + 5 = x
6.1 Notion de lvalue
Nous voyons donc que cet opérateur d’affectation impose des restrictions sur son premier opérande. En effet, ce dernier doit être une référence à un emplacement mémoire dont on pourra
effectivement modifier la valeur.
Dans les autres langages, on désigne souvent une telle référence par le nom de « variable » ; on
précise généralement que ce terme recouvre par exemple les éléments de tableaux ou les composantes d’une structure. En langage C, cependant, la syntaxe du langage est telle que cette
notion de variable n’est pas assez précise. Il faut introduire un mot nouveau : la lvalue. Ce
terme désigne une « valeur à gauche », c’est-à-dire tout ce qui peut apparaître à gauche d’un
opérateur d’affectation.
Certes, pour l’instant, vous pouvez trouver que dire qu’à gauche d’un opérateur d’affectation
doit apparaître une lvalue n’apporte aucune information. En fait, d’une part, nous verrons
qu’en C d’autres opérateurs que = font intervenir une lvalue ; d’autre part, au fur et à mesure
que nous rencontrerons de nouveaux types d’objets, nous préciserons s’ils peuvent être ou non
utilisés comme lvalue.
Pour l’instant, les seules lvalue que nous connaissons restent les variables de n’importe quel
type de base déjà rencontré.
6.2 L’opérateur d’affectation possède une associativité
de droite à gauche
Contrairement à tous ceux que nous avons rencontrés jusqu’ici, cet opérateur d’affectation
possède une associativité de droite à gauche. C’est ce qui permet à une expression telle que :
i = j = 5
d’évaluer d’abord l’expression j = 5 avant d’en affecter la valeur (5) à la variable j. Bien
entendu, la valeur finale de cette expression est celle de i après affectation, c’est-à-dire 5.
6.3 L’affectation peut entraîner une conversion
Là encore, la grande liberté offerte par le langage C en matière de mixage de types se traduit
par la possibilité de fournir à cet opérateur d’affectation des opérandes de types différents.
Cette fois, cependant, contrairement à ce qui se produisait pour les opérateurs rencontrés
précédemment et qui mettaient en jeu des conversions implicites, il n’est plus question,
ici, d’effectuer une quelconque conversion de la lvalue qui apparaît à gauche de cet opérateur.
Delannoy Livre.book Page 38 Mercredi, 6. mai 2009 4:26 16
38
© Éditions Eyrolles
En revanche, il n’est pas possible de faire apparaître une expression comme premier opérande
de cet opérateur =. Ainsi, l’expression suivante n’aurait pas de sens :
c + 5 = x
6.1 Notion de lvalue
Nous voyons donc que cet opérateur d’affectation impose des restrictions sur son premier opérande. En effet, ce dernier doit être une référence à un emplacement mémoire dont on pourra
effectivement modifier la valeur.
Dans les autres langages, on désigne souvent une telle référence par le nom de « variable » ; on
précise généralement que ce terme recouvre par exemple les éléments de tableaux ou les composantes d’une structure. En langage C, cependant, la syntaxe du langage est telle que cette
notion de variable n’est pas assez précise. Il faut introduire un mot nouveau : la lvalue. Ce
terme désigne une « valeur à gauche », c’est-à-dire tout ce qui peut apparaître à gauche d’un
opérateur d’affectation.
Certes, pour l’instant, vous pouvez trouver que dire qu’à gauche d’un opérateur d’affectation
doit apparaître une lvalue n’apporte aucune information. En fait, d’une part, nous verrons
qu’en C d’autres opérateurs que = font intervenir une lvalue ; d’autre part, au fur et à mesure
que nous rencontrerons de nouveaux types d’objets, nous préciserons s’ils peuvent être ou non
utilisés comme lvalue.
Pour l’instant, les seules lvalue que nous connaissons restent les variables de n’importe quel
type de base déjà rencontré.
6.2 L’opérateur d’affectation possède une associativité
de droite à gauche
Contrairement à tous ceux que nous avons rencontrés jusqu’ici, cet opérateur d’affectation
possède une associativité de droite à gauche. C’est ce qui permet à une expression telle que :
i = j = 5
d’évaluer d’abord l’expression j = 5 avant d’en affecter la valeur (5) à la variable j. Bien
entendu, la valeur finale de cette expression est celle de i après affectation, c’est-à-dire 5.
6.3 L’affectation peut entraîner une conversion
Là encore, la grande liberté offerte par le langage C en matière de mixage de types se traduit
par la possibilité de fournir à cet opérateur d’affectation des opérandes de types différents.
Cette fois, cependant, contrairement à ce qui se produisait pour les opérateurs rencontrés
précédemment et qui mettaient en jeu des conversions implicites, il n’est plus question,
ici, d’effectuer une quelconque conversion de la lvalue qui apparaît à gauche de cet opérateur.
Delannoy Livre.book Page 38 Mercredi, 6. mai 2009 4:26 16
