Différence entre “int i = 1,2,3” et “int i = (1,2,3)” – déclaration de variable avec l’opérateur de virgule

  1. int i=1,2,3;

  2. int i=(1,2,3);

  3. int i; i=1,2,3;

Quelle est la différence entre ces déclarations? Je ne peux pas trouver de raison particulière pour cela.

 Statement 1 Result : Comstack error. 

L’opérateur ‘=’ a une priorité supérieure à l’opérateur ‘,’. la virgule agit ici comme un séparateur. le compilateur crée une variable entière ‘i’ et l’initialise avec ‘1’. Le compilateur ne parvient pas à créer la variable entière ‘2’, car ‘2’ n’est pas un identifiant valide.


 Statement 2 Result: i=3 

L’opérateur ‘()’ a une priorité supérieure à celle de ‘=’. Donc, premièrement, l’opérateur de support est évalué. L’opérateur ‘()’ est actionné de gauche à droite. mais c’est toujours le résultat du dernier qui est assigné.


 Statement 3: Result: i=1 

L’opérateur ‘=’ a une priorité supérieure à l’opérateur ‘,’. donc ‘i’ est initialisé par ‘1’. ‘2’ et ‘3’ ne sont que des expressions constantes. donc pas d’effet.

C’est l’opérateur de virgule

 i = a, b, c; // stores a into i ... a=5, b=2, c=3, i=5 i = (a, b, c); // stores c into i ... a=5, b=2, c=3, i=3 

le comportement différent entre les première et deuxième lignes est dû au fait que l’opérateur de virgule a une priorité inférieure à celle de l’affectation.