¿Cómo se interpretan estas instrucciones en C?

Iniciado por bichovis, 31 Octubre 2011, 23:09 PM

0 Miembros y 1 Visitante están viendo este tema.

bichovis

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.

Belial & Grimoire

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 &&;
.                                 

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

naderST

int x += (i = fucion()) && 1;

@rir3760 que tiene de malo esa expresión?

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

s00rk

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
Código (java) [Seleccionar]

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.