Décrémentation dans une condition ternaire

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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.

Édité par Ifrit

La parole est d’argent, le silence est d’or.

+0 -0

Cette réponse a aidé l’auteur du sujet

no_days -= (leap_year ?  2 : 3);

Plus lisible, plus simple.

ache.one                 🦹         👾                                🦊

+2 -0

Cette réponse a aidé l’auteur du sujet

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).

ache.one                 🦹         👾                                🦊

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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