Expressions L-Value et R-Value
Les expressions qui font référence à des emplacements de mémoire sont appelées expressions « l-value ». Une l-value représente la valeur « localisateur » d’une zone de stockage, ou une valeur « gauche », ce qui implique qu’elle peut apparaître à gauche du signe égal à (=
). Les l-values sont souvent des identificateurs.
Les expressions faisant référence à des emplacements modifiables sont appelées « l-values modifiables ». Une l-value modifiable ne peut pas avoir un type de tableau, un type incomplet ou un type avec l’attribut const
. Pour que les structures et les unions soient des l-values modifiables, elles ne doivent comporter aucun membre défini avec l’attribut const
. Le nom de l'identificateur désigne un emplacement de stockage, alors que la valeur de la variable est la valeur stockée à cet emplacement.
Un identificateur est une l-value modifiable si elle fait référence à un emplacement mémoire et si son type est arithmétique, structure, union ou pointeur. Par exemple, si ptr
est un pointeur vers une zone de stockage, *ptr
est une l-value modifiable qui désigne la zone de stockage vers laquelle ptr
pointe.
Les expressions C suivantes peuvent être des expressions l-value :
Un identificateur de type intégral, flottant, pointeur, structure ou union
Une expression d’indice (
[ ]
) qui ne correspond pas à un tableauUne expression de sélection de membre (
->
ou.
)Une expression d’indirection unaire (
*
) qui ne fait pas référence à un tableauUne expression l-value entre parenthèses
Un objet
const
(une l-value non modifiable)
Le terme « r- value » est parfois utilisé pour décrire la valeur d'une expression et pour établir une distinction par rapport à une l-value. Toutes les l-values sont des r- values, mais les r- values ne sont pas toutes des l-values.
Section spécifique à Microsoft
Microsoft C inclut une extension vers la norme C ANSI qui permet d’effectuer un cast sur des l-values à utiliser en tant que l-values, à condition que la taille de l’objet ne soit pas rallongée lors de cette opération. (Pour plus d’informations, consultez Conversions de type cast.) L’exemple suivant illustre cette fonctionnalité :
char *p ;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
Par défaut pour Microsoft C, les extensions Microsoft sont activées. Utilisez l’option du compilateur /Za pour désactiver ces extensions.
FIN de la section spécifique à Microsoft
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour