# C et C++ > C > Contribuez >  Ajout dans le FAQ

## callmarl

Bonjour,

Apres quelques recherches sur le net j'ai finalement compris ce qu'est une lvalue ("location value") ou une rvalue ("read value"). Voila le truc c'est que c'est assez flou et qu'il n'y a pas vraiment de rponse (solide) et facilement accessible sur le net en francais, mais plutot une somme de topic qui rponde plus ou mois au sujet de faon plus ou moins bien. Je me disais qu'il serait bien d'ajout une explication sur ces 2 notions dans la FAQ c puisque le compilo nous sort parfois ces termes.

Bien  vous  ::):

----------


## ternel

Tu peux trouver une explication plus dtaille ici: http://en.cppreference.com/w/c/language/value_category

Une lvalue peut ne pas tre modifiable.

La diffrence principale, c'est qu'une rvalue n'est pas matrialise par un objet en mmoire, donc que son adresse ne peut pas tre prise

----------


## callmarl

Bonjour,

en-effet je n'ai pas eu le reflex d'aller voir le FAQ cpp, une rvalue, si j'ai bien compris, c'est un lment temporaire et non permanent au contraire d'une lvalue qui ce dfinirai comme un identifiant de valeur qui permet celle-ci de devenir permanente.  En gros si j'ai une erreur du type "you try to assign a lvalue line xxx", il me dis que j'essaye d'assigne un identifiant (qui n'est alors que quelque chose de smantique) comme tant une valeur, un peux comme si j'essayer d'enregistrer une partie de code tel que nous l'crivons, dans une variable...

Je voudrai juste rappeler si des gens viennent  lire ce topic que la compression d'un langage par un ordinateur au moment de la compilation s'effectue en trois tapes (on ne parle pas de la "chane de compilation" ici mais plutt du principe algorithmique de conversion d'un langage en binaire) : 

-> l'aspect lexicale, dfinit les symbole ou les caractre qui servent  la rdaction du programme.
-> l'aspect syntaxique, dfinit l'ensemble des rgle grammaticale qui permet l'assemblage des mot dans une phrase.
-> l'aspect smantique qui tudie la signification d'une phrases.

On retrouve ici la dfinition d'un langage de haut niveaux, ce n'est quaprs avoir effectuer l'analyse lexicale, syntaxique puis smantique que le compilateur sera apte  transformer le code source en binaire. La notion de lvalue et rvalue, sont des notions qui touche alors  la smantique du code source et au sens mme des phrases de code. Dans une phrase du type: 



```
x = 8;
```

x sera alors l'identifiant de la valeur 8 et donc a proprement parler une lvalue tandis que 8 si on n'utilise pas x par la suite, il sera impossible de le retrouv c'est alors une rvalue (hormis rcrire 8). Si maintenant on cris:



```
y = x;
```

y ne prendra pas la valeur 'x'  proprement parler mais la valeur que x identifie c'est dire 8. Dans certain qu'a dans le langage c le compilateur peux nous grond dessus et nous dire qu'a la phase d'analyse smantique il  compris que l'on essaye d'assign  y le terme 'x' (qui pour lui ne corresponds pas  un char mais  un terme du language une lvalue). Ca ne nous arrivera jamais de tomber sur cette erreur pour le cas ci-dessus; mais plus souvent et par exemple lors de la manipulation de tableaux.

Dans ce dernier cas on peux donc identifier la notion de "location value" qui permet de localiser, de retrouver une valeur et de "read value", la valeur que l'ordinateur lit quand on effectue "y = x" c'est  dire 8.

----------


## nnovic

Mince, j'ai toujours pens que le "L" c'tait pour "Left", et "R" pour "Right"...  ::oops::

----------


## ternel

C'est pourtant la raison de ces noms. Initialiement.
une lvalue peut tre  gauche d'un =, pas une rvalue.

----------


## callmarl

> C'est pourtant la raison de ces noms. Initialiement.
> une lvalue peut tre  gauche d'un =, pas une rvalue.


C'est le "peut" qui rend l'usage de ce nom ("left value") absurde. En-effet un lvalue peux ce trouver  droite (smantiquement parlant) bien que ce soit en ralit une rfrence  une rvalue...  ::weird:: 
 https://msdn.microsoft.com/fr-fr/library/f90831hc.aspx  ::D:

----------

