Skip to content

Instantly share code, notes, and snippets.

@phaya

phaya/ifcomma.c Secret

Created October 18, 2013 00:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save phaya/531bd1b4b1b730262cea to your computer and use it in GitHub Desktop.
Save phaya/531bd1b4b1b730262cea to your computer and use it in GitHub Desktop.
Otro bocado que ha surgido de dudas de clase. El siguiente programa pretende comprobar si m es igual a alguno de los números listados, y en caso que la condición sea verdadera imprimir m. Como podéis comprobar funciona, o ¿no? ¿en qué casos falla y por qué?
#include<stdio.h>
int main()
{
int m = 7;
if (m == 1, 3, 5, 7, 8, 10, 12) {
printf("m = %d\n", m);
}
}
@ArturoBlazquez
Copy link

Lo que está dentro del if equivale a escribir m==1, 1!=0, 3!=0, 5!=0, 7!=0, 8!=0, 10!=0, 12!=0
He estado probando y no se exactamente por qué, pero el if, al estar separada por comas, se evalúa como verdadero si la última condición es cierta, y se evalúa como falso si la última condición es falsa.

@phaya
Copy link
Author

phaya commented Oct 25, 2013

No es exactamente así como funciona. Hay que tener en cuenta que la , es un operador binario en C al igual por ejemplo, que la suma. Evalúa el primer operando, descartando el resultado, y luego evalúa el segundo operando devolviendo su valor. Por ejemplo, si tienes int i=1 y la siguiente sentencia a = (i++, 5), el resultado es que en a se guarda 5, e i pasa a valer 2 (nótese los paréntesis dado que la , tiene una precedencia menor que la asignación). Con esta información, ¿serías capaces de explicar que está pasando?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment