opérateur virgule en si la condition

int a = 1, b = 0;

if(a, b)
   printf("success\n");
else
   printf("fail\n");

if(b, a)
   printf("success\n");
else
   printf("fail");

C'est un fichier cpp et j'ai eu la sortie de Visual Studio 2010

fail
success

Pourquoi ce comportement? Pourriez-vous expliquer?

  • Vous savez que c'est à l'aide de l'opérateur virgule en l'état, mais vous devez vous demander?
  • Vous pouvez simplement ajouter un point d'arrêt sur la première instruction et exécuter le programme ligne par ligne à l'aide de la touche F10 pour voir le flux vous-même.
  • Je sais que virgule agit comme un point de séquence dans les déclarations, mais pas dans les arguments de fonctions.Pouvez-vous me dire si il est un point de séquence à l'intérieur de if?Je intuitivement sentir oui,mais je voudrais vous confirmer.
  • Le if prend une expression, donc dans if (a, b) c'est l'opérateur virgule, donc d'un point de séquence. En fonction de listes d'arguments ou d'initialiser les listes, une virgule est juste un séparateur, pas l'opérateur virgule [bien, que l'on pourrait appeler printf("%d\n", (1,2)); et alors nous aurions un opérateur virgule dans le deuxième argument de printf, mais nous avons besoin des parenthèses pour que].
  • Pouvez-vous vous pencher sur cette question de la mienne s'il vous plaît.Je n'ai pas trouver la réponse dont j'avais besoin. stackoverflow.com/questions/16475918/...
InformationsquelleAutor indira | 2013-05-10