elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  What's the value of i++ + i++? Bjarne Stroustrup F.A.Q.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: What's the value of i++ + i++? Bjarne Stroustrup F.A.Q.  (Leído 3,161 veces)
erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
What's the value of i++ + i++? Bjarne Stroustrup F.A.Q.
« en: 19 Marzo 2014, 23:49 pm »

En este link http://www.stroustrup.com/bs_faq2.html exactamente como es el titulo del post, él explica que este ejemplo:

v[ i ] = i++;

Deberia evitarse ( segun lei ) porque el resultado es indefinido. Por como tengo entendido, como el operador esta en post-incremento, él asignaria el valor de "i" a la variable y luego se incrementa el valor de "i", ¿ O fue que entendi mal lo que quiso explicar el señor Stroustrup?
 



« Última modificación: 20 Marzo 2014, 00:14 am por erest0r » En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: What's the value of i++ + i++? Bjarne Stroustrup F.A.Q.
« Respuesta #1 en: 20 Marzo 2014, 00:36 am »

me parece absurdo que sea indefinido, porque instrucción es bien clara

el dice
Citar
It's undefined. Basically, in C and C++, if you read a variable twice in an expression where you also write it, the result is undefined. Don't do that. Another example is:
   v = i++;
Related example:
   f(v,i++);
Here, the result is undefined because the order of evaluation of function arguments are undefined.
Having the order of evaluation undefined is claimed to yield better performing code. Compilers could warn about such examples, which are typically subtle bugs (or potential subtle bugs). I'm disappointed that after decades, most compilers still don't warn, leaving that job to specialized, separate, and underused tool


y se a que se refiere... aunque creo que lo explica o redacta mal...

recuerdo que los compiladores cuando en por ejemplo un if descubren que la condicion no se puede cumplir se detienen....


entonces...


Código
  1. int c =0;
  2.  
  3. if(true && c++){
  4.  
  5. }
  6.  

en este caso c = 1 al finalizar el programa... pero si sucede esto

Código
  1. int c =0;
  2. if(false && c++){
  3.  
  4. }
  5.  

en este caso c = 0

esto se puede tomar como indefinición o comportamiento inesperado ya que el hecho que c aumente no es seguro


« Última modificación: 20 Marzo 2014, 11:52 am por Eternal Idol » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: What's the value of i++ + i++? Bjarne Stroustrup F.A.Q.
« Respuesta #2 en: 20 Marzo 2014, 00:53 am »

Mmmmm a mi si me extrañó eso, a lo mejor si fue que falto explicar mejor ese punto.

EDIT: Se te paso por alto algo en la cita que hiciste, colocaste v = i++;
 y es v[ i ] = i++;



Informacion propia del señor Stroustrup ( si, le envie un correo con la duda que acabo de proponer aqui )

Yo:

" Hello Mr. Stroupstrup , mi name is Alver Lopez, well i noticed in the section

What's the value of i++ + i++? at http://www.stroustrup.com/bs_faq2.html#evaluation-order  where you say v[ i ] = i++; would have a undefined result, i though as a post-increment operator, the actual value of "i" would be asigned to v, then increase the value of "i", or maybe you forgot to point out something else?

Thank you."

Sr. Strouptous:

" No. It's undefined. The left-hand side may be evaluated before the right-hand side (yielding a pointer to where the result of the right-hand side is to be stored). This is not a rule I would have invented. "

« Última modificación: 20 Marzo 2014, 11:54 am por Eternal Idol » En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: What's the value of i++ + i++? Bjarne Stroustrup F.A.Q.
« Respuesta #3 en: 20 Marzo 2014, 02:04 am »

probé lo siguiente

Código
  1. int i =0;
  2.    int v[6]={0,0,0,0,0,0};
  3.    v[i]=i++;
  4.    v[i++]=i++;
  5.    v[i++]=i++;
  6.    v[i++]=i;
  7.    v[i]=i++;

resultado esperado...
i = 0;
v=i++ esperado v[0]=0, i+1
v[i++]=i++ esperado v[1]=2, i+1
v[i++]=i++ esperado v[3]=4, i+1
v[i++]=i esperado v[5]=6
v=i++ esperado v[6]=6, i+1
al final se esperaba i = 7


resultado del codigo...
0, 1, 0, 3 ,0, 5


como que si es medio erratico o yo estoy calculando mal
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: What's the value of i++ + i++? Bjarne Stroustrup F.A.Q.
« Respuesta #4 en: 20 Marzo 2014, 02:35 am »

En realidad si me parece raro ese resultado, es decir ¿ Cómo es que después de un numero distinto a 0, vuelve a aparecer ? xD no logro ver el orden como deberia evaluarse cada sentencia.
En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: What's the value of i++ + i++? Bjarne Stroustrup F.A.Q.
« Respuesta #5 en: 20 Marzo 2014, 02:40 am »

fíjate que me salto la posición 2 y 4 del array, esos 0 si van ahí pero los otros números nos XD
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: What's the value of i++ + i++? Bjarne Stroustrup F.A.Q.
« Respuesta #6 en: 20 Marzo 2014, 02:51 am »

Una expresión como esta:
Código
  1. a[i] = i++;
Tiene un resultado indefinido, explicando por partes:

1) Los puntos de secuencia. Salvo los operadores '&&', '||', ',' y '?:' el siguiente punto de secuencia se indica por el terminador de sentencia ';'. Un ejemplo:
Código
  1. alguna_expresion (1); /* (1)  marca el siguiente punto de secuencia */

2) Todo efecto lateral (por ejemplo el generado por los operadores unarios ++ y --) se aplicara en algún momento antes del siguiente punto de secuencia.

3) Dada la mentada expresión:
Código
  1. a[i] = i++;
  2. (1)  (2)
Y considerando lo anterior esta puede ser evaluada en cualquiera de las siguientes formas:

* La expresión (2) se evalúa primero, a continuación aplica el efecto lateral y por ultimo se evalúa (1).
* La expresión (2) se evalúa primero, a continuación se evalúa (1) y por ultimo aplica el efecto lateral.
* La expresión (1) se evalúa primero, a continuación se evalúa (2) y por ultimo aplica el efecto lateral.

Cualquiera que suceda es valida (y por ello la recomendación de evitar expresiones cuyo resultado es indefinido).

----

Otra historia son expresiones del tipo:
Código
  1. i = i++;
Estas son ilegales ya que se modifica un objeto (en este caso la variable "i") en mas de una ocasión entre puntos de secuencia (la asignación mas el efecto lateral).

Un saludo
En línea

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
erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: What's the value of i++ + i++? Bjarne Stroustrup F.A.Q.
« Respuesta #7 en: 20 Marzo 2014, 03:31 am »

Gracias por la explicación rir3760, al menos ya es algo de lo que estaré consciente de ahora en adelante jejeje
En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines