Hola a todos,
Viendo un código por ahí me he encontrado con instrucciones como las siguientes, que no se como se compilan (me gustaría traducirlas a Java)
int i;
int x += (i = fucion()) && 1; (son dos simbolos &&, no uno)
¿Bajo qué circunstancias suma y qué es lo que suma a x?
o esta otra
int status = (funcion_void(), !num_int);
¿Qué es lo que iguala a la variable entera?, ¿la negación de la variable otra variable numero entero?.
¿Cómo se pueden interpretar estas condicionales en C?
Muchas gracias y un saludo.
hola
pues por lo que veo depende de "i", la funcion "fucion()", me imagino que hace return con un numero
i = fucion();
int x;
x = x + i && 1;
&&, es una comparativa AND logico;
como decir y == 1 && x == 1, hacer algo; pero creo hay que ver que hace fucion para saber que suma a x y porque hace una comparativa con 1
la siguiene hay que ver que da "funcion_void" y que en num_int, pero si es tambien una comparativa podria usarse, strcmp, !=, u otra vez &&;
Cita de: bichovis en 31 Octubre 2011, 23:09 PMint x += (i = fucion()) && 1; (son dos simbolos &&, no uno)
Esa declaración no es valida (no puedes utilizar "+=").
Cita de: bichovis en 31 Octubre 2011, 23:09 PMint status = (funcion_void(), !num_int);
Aquí aplica primero el operador secuencial ',':
1) Se evalúa la expresion "funcion_void()", su resultado se descarta.
2) Se evalúa "!num_int" y ese es el resultado de la expresión.
En pocas palabras el resultado sera 0 o 1.
Un saludo
int x += (i = fucion()) && 1;
@rir3760 que tiene de malo esa expresión?
Los problemas son dos.
El importante (por dejar invalida la sentencia) es que un objeto solo puede accederse después de su declaración y esto:
int x += (i = fucion()) && 1;
Es equivalente a:
int x = x + ((i = fucion()) && 1);
Declara la variable "x" y al darle un valor inicial utiliza una variable (ella misma) cuya declaración todavía no tiene efecto.
El segundo es, aun cuando fuera valida (no lo es), su valor inicial estaría dado por una recursion infinita (el valor inicial de "x" es el valor de "x" mas ...).
Un saludo
Cita de: rir3760 en 4 Noviembre 2011, 04:06 AM
Los problemas son dos.
El importante (por dejar invalida la sentencia) es que un objeto solo puede accederse después de su declaración y esto:
int x += (i = fucion()) && 1;
Es equivalente a:
int x = x + ((i = fucion()) && 1);
Declara la variable "x" y al darle un valor inicial utiliza una variable (ella misma) cuya declaración todavía no tiene efecto.
El segundo es, aun cuando fuera valida (no lo es), su valor inicial estaría dado por una recursion infinita (el valor inicial de "x" es el valor de "x" mas ...).
Un saludo
Es lo que iva a decir aunque tambien pense que talvez podria hacer que el compilador le otorgue el minimo valor disponible aunque seria muy dudoso que pase, asi que si ahi tienes razon al final.
si acaso seria asi
int i = fucion();
int x = Integer.MIN_VALUE;
x += i && 1;
en i si se puede poner ahi directamente ya que fucion() devera devolver un int. y ya lo demas creo que se entiende, o bueno yo aun no del todo && ya que nunca lo he usado de esa manera.