Décrémentation dans une condition ternaire

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Dans le cours sur le langage C, au TP sur le jour de la semaine, j’ai écrit la ligne suivante :

leap_year ? no_days -= 2 : no_days -= 3;

(leap_year est un booléen et no_days un unsigned long.)

Cette ligne provoque l’affichage d’une erreur dans VSCodium sur la variable leap_year :

l’expression doit être une valeur modifiable

et lorsque je lance la compilation avec zcc j’obtiens le message d’erreur :

error: lvalue required as left operand of assignment

Cependant, ces messages d’erreur disparaissent si j’ajoute des parenthèses autour de l’expression après : :

leap_year ? no_days -= 2 : (no_days -= 3);

Je souhaiterais simplement comprendre la cause des erreurs et ce qui provoque leur disparition si j’ajoute des parenthèses à la troisième expression.

+0 -0

J’ai pas étudié mais je pense que :

leap_year ? no_days -= 2 : no_days -= 3;

Qui doit être parser comme cela :

(leap_year ? no_days -= 2 : no_days) -= 3;

Et du coup, à gauche de -= on a une rvalue et pas un lvalue (une expression non assignable).

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte