2 votes

Je ne comprends pas votre déclaration.

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);
}

8voto

Joachim Pileborg Points 121221

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 .

3voto

dbush Points 8590

Ceci :

y---3;

Parses comme :

y-- - 3;

Donc cette expression diminue y , prend la valeur antérieure de y et lui soustrait 3. Le résultat de l'expression (c'est-à-dire 1) est écarté parce qu'il est utilisé comme une déclaration par lui-même.

2voto

Sourav Ghosh Points 54713

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.

0voto

alani Points 11147

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

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.

Powered by:

X