Pourquoi y---3
se comportent comme y = 3
? Quelqu'un peut-il expliquer ?
#include <stdio.h>
main(){
int x=-2, y=4, z;
y---3;
printf("%d",y);
}
Pourquoi y---3
se comportent comme y = 3
? Quelqu'un peut-il expliquer ?
#include <stdio.h>
main(){
int x=-2, y=4, z;
y---3;
printf("%d",y);
}
C essaie de lire ses jetons avec avidité, c'est-à-dire qu'il essaie de lire et de faire correspondre des séquences aussi longues que possible. Par conséquent, le ---
sera interprété comme -- -
ce qui signifie que vous avez y-- - 3
.
Puisque vous ne stockez le résultat nulle part, le seul bit pertinent est y--
qui diminue y
de 4
a 3
.
y---3;
n'est pas la même chose que y = 3
.
y--3
est interprété comme (y--) - 3
et le résultat final de la soustraction est rejeté. Ainsi, le seul effet secondaire de y--
est conservé, en décrémentant 1
de la valeur antérieure de y
qui a été 4
.
D'ailleurs, y---n
, donde n
est un entier quelconque produira le même résultat pour l'instruction d'impression suivante.
Si vous compilez ceci avec les avertissements activés, votre compilateur vous dira (parmi d'autres avertissements) quelque chose comme :
test.c:6:7: warning: value computed is not used [-Wunused-value]
y---3;
~~~^~
Dans ce cas, le code, écrit de manière plus lisible, est le suivant :
y-- - 3;
ce qui est équivalent à :
y - 3;
y -= 1;
La première de ces déclarations est redondante, car vous calculez une valeur et la rejetez ensuite.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.