Expressions l-value et de R- Valeur
Les expressions qui font référence à des emplacements de mémoire sont appelées expressions « l ».Une l-value représente une valeur de « localisateur » de zone de stockage, ou une valeur « left », ce qui implique qu'elle peut apparaître le à gauche du signe égal (=).Les valeurs lvalues sont souvent des identificateurs.
Les expressions en faisant référence aux emplacements modifiables sont appelées « des valeurs lvalues modifiables. » Une l-value modifiable ne peut pas avoir de type de tableau, un type incomplet, ou un type avec l'attribut de const .Pour que les structures et les unions sont des valeurs lvalues modifiables, ils ne doivent avoir aucun membre avec l'attribut de const .Le nom de l'identificateur indique un emplacement de stockage, alors que la valeur de la variable est la valeur signalée à cet emplacement.
Un identificateur est une l-value modifiable s'il 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, puis *ptr est une l-value modifiable qui indique la zone de stockage laquelle ptr indique.
Les expressions suivantes l'une des C peuvent être des expressions l-value :
Un identificateur d'intégraux, du flottante, de pointeur, de structure, ou de type union
Une expression d'indice ([]) qui ne correspond pas à un tableau
Une expression de sélection des membres (- > ou .)
Une expression d'unaire-indirection (*) qui ne fait pas référence à un tableau
Une expression lvalue entre parenthèses
Un objet de const (une l-value non modifiable)
Le terme « r-valeur » est parfois utilisé pour décrire la valeur d'une expression et pour établir une distinction d'une l-value.Toutes les valeurs lvalues sont des r-valeurs mais pas toutes les r-valeurs sont des valeurs lvalues.
Spécifique à Microsoft
Microsoft C inclut une extension à la norme C ANSI qui autorise les casts l-value qu'à utiliser comme valeurs lvalues, tant que la taille de l'objet n'est pas rallongée via le cast.(Consultez conversions de cast de type pour plus d'informations.) L'exemple suivant illustre cette fonctionnalité :
char *p ;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
la valeur par défaut pour Microsoft C est que les extensions Microsoft sont activées.Utilisez l'option du compilateur /Za de désactiver ces extensions.
détail de FIN Microsoft