Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: bichovis en 31 Octubre 2011, 23:09 pm



Título: ¿Cómo se interpretan estas instrucciones en C?
Publicado por: bichovis en 31 Octubre 2011, 23:09 pm
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.


Título: Re: ¿Cómo se interpretan estas instrucciones en C?
Publicado por: Belial & Grimoire en 2 Noviembre 2011, 21:12 pm
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 &&;


Título: Re: ¿Cómo se interpretan estas instrucciones en C?
Publicado por: rir3760 en 3 Noviembre 2011, 01:30 am
int x += (i = fucion()) && 1;      (son dos simbolos &&, no uno)
Esa declaración no es valida (no puedes utilizar "+=").

int  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


Título: Re: ¿Cómo se interpretan estas instrucciones en C?
Publicado por: naderST en 4 Noviembre 2011, 03:28 am
Código
  1. int x += (i = fucion()) && 1;

@rir3760 que tiene de malo esa expresión?


Título: Re: ¿Cómo se interpretan estas instrucciones en C?
Publicado por: 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:
Código
  1. int x += (i = fucion()) && 1;
Es equivalente a:
Código
  1. 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


Título: Re: ¿Cómo se interpretan estas instrucciones en C?
Publicado por: s00rk en 4 Noviembre 2011, 04:21 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:
Código
  1. int x += (i = fucion()) && 1;
Es equivalente a:
Código
  1. 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
  1. int i = fucion();
  2. int x = Integer.MIN_VALUE;
  3. x += i && 1;
  4.  

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.