Autor
|
Tema: Problema con uso del incremento de una variable. (Leído 3,786 veces)
|
SDCC
Desconectado
Mensajes: 55
|
Muy buenos dias,tardes o noches,durante un problema que realizaba sobre archivos me tope con un error un tanto extraño y que me hizo retomar este tema basico sobre el incremento en postfijo y prefijo.Tengo muy presentes las dos diferencias entre escribir el incremento en postfijo y prefijo pero a la hora de yo realizar varios postfijos o prefijos en una sentencia como la funcion printf() me topo con que los datos que arroja son algo raros y no termino de realizar una conexion entre los incrementos de la variable y los valores arrojados. #include <stdio.h> #include <stdlib.h> int main() { int i=0; printf("%d %d %d %d %d %d", ++i , i ++, ++i , i ++, ++i , i ++); }
El problema anterior no es el problema original, sin embargo es un pedazo de codigo que en esencia es el mismo problema que tengo en archivos y que ya pude solucionar de otra forma pero que sin embargo sigo sin entender la razon del resultado.
|
|
« Última modificación: 26 Abril 2018, 21:46 pm por SDCC »
|
En línea
|
|
|
|
engel lex
|
el incremento prefijo y postfijo tienen su juego debido a su forma de funcionamiento... muchas veces pueden tomarse como "comportamiento indefinido" la variable no necesariamente se evalúa de izquierda a derecha o de izquierda a derecha... esto no sigue un standard peculiar un articulo en inglés sobre los puntos de secuencia, que es quien "define" esto https://en.wikipedia.org/wiki/Sequence_point
|
|
|
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.
|
|
|
SDCC
Desconectado
Mensajes: 55
|
Muchas gracias por tu respuesta,ahora entiendo que es lo que ocurre.
|
|
|
En línea
|
|
|
|
JPS
Desconectado
Mensajes: 17
|
Mmm, no me ha quedado muy claro..., soy nuevo. /* https://en.wikipedia.org/wiki/Sequence_point Los puntos de secuencia también entran en juego cuando la misma variable se modifica más de una vez en una sola expresión. Un ejemplo frecuentemente citado es la expresión C i=i++ , que aparentemente le asigna a i su valor anterior e incrementa i . El valor final de i es ambiguo, ya que, dependiendo del orden de evaluación de la expresión, el incremento puede ocurrir antes, después o intercalado con la asignación. La definición de un idioma particular puede especificar uno de los comportamientos posibles o simplemente decir que el comportamiento no está definido . En C y C ++, la evaluación de dicha expresión produce un comportamiento indefinido. [4] Otros lenguajes, como C # , pueden definir la precedencia de la asignación e incrementar el operador de tal forma que se garantice el resultado de la expresión i=i++. */ #include <stdio.h> #include <stdlib.h> int main() { /*Puntos de secuencia en diferentes expresiones*/ int i=0; printf("Reiniciamos i = 0\n\n"); i=0; /*Puntos de secuencia en una misma expresion*/ printf(" i = %d\n++i = %d\n i++ = %d\n++i = %d\n i++ = %d\n++i = %d\n i++ = %d\n++i = %d\n i++ = %d\n++i = %d\n i++ = %d\n i = %d\n\n",i ,++i ,i ++,++i ,i ++,++i ,i ++,++i ,i ++,++i ,i ++,i ); return 0; }
Resultados: i = 0 ++i = 1 i++ = 1 ++i = 3 i++ = 3 ++i = 5 i++ = 5 ++i = 7 i++ = 7 ++i = 9 i++ = 9 i = 10
Reiniciamos i = 0
i = 10 ++i = 10 i++ = 8 ++i = 10 i++ = 6 ++i = 10 i++ = 4 ++i = 10 i++ = 2 ++i = 10 i++ = 0 i = 10
-------------------------------- Process exited after 0.02101 seconds with return value 0 Presione una tecla para continuar . . .
En la primera lista de números se ve un comportamiento esperado en los operadores de incremento.... ¿Porque están cada uno en una expresión (printf) única para cada uno; aunque todos hagan referencia a la misma variable? En la segunda lista de números se observa un comportamiento inesperado y parece errático; pero sin embargo, se puede apreciar una progresión descendente: 10, 8, 6, 4, 2, 0. Frente a otra progresión permanente de 10. En definitiva; aunque muestre una especie de patrón. ¿Hay que considerarlo errático y ambiguo? ya que todas las evaluaciones a la misma variable se efectuan en la misma expresión (printf) y... ¿es algo que se debe de evitar?
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Has leído el artículo del link?
En él se explica porqué ocurre y en qué otros casos puede suceder.
Básicamente habla de los puntos de secuencia que son situaciones en la que C asegura que todos los cálculos previos están hechos. Si hay expresiones que dependen de unas de otras y no ha habido puntos de secuencia, puedes encontrar resultados aleatorios como en el ejemplo ya que, para hacer código más eficiente puede ejecutar esa serie de instrucciones en tiempos diferentes a los que has programado.
|
|
|
En línea
|
|
|
|
6666
Desconectado
Mensajes: 146
Wikileaks.org
|
El operador sufijo/prefijo solo funcionan en variables. Para solucionar eso se usa la sobrecarga de operadores, deberías leer sobre el operador 'operator'
|
|
« Última modificación: 2 Mayo 2018, 11:14 am por 6666 »
|
En línea
|
|
|
|
JPS
Desconectado
Mensajes: 17
|
Gracias Mafus y 6666.
Si lo leí... en parte... pero no lo logré entender del todo, supongo que por la densidad de contenido. Tengo que dedicarle más tiempo y también le echaré un ojo a eso de sobrecarga de operadores para ampliar conocimientos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
se puede incremento en id?
Desarrollo Web
|
basickdagger
|
3
|
2,882
|
15 Junio 2012, 13:43 pm
por basickdagger
|
|
|
Problema con variable de sesion y variable de conexion
PHP
|
Vaagish
|
9
|
6,330
|
19 Marzo 2013, 22:37 pm
por Vaagish
|
|
|
Incremento de punteros
« 1 2 »
Programación C/C++
|
NathanD
|
11
|
5,584
|
31 Marzo 2013, 18:42 pm
por 85
|
|
|
Problema y duda con incremento de punteros
Programación C/C++
|
NicolasPileci
|
2
|
1,885
|
6 Septiembre 2016, 20:34 pm
por NicolasPileci
|
|
|
1, acciones, incremento VS 0, incremento, acciones.
Programación General
|
Tachikomaia
|
2
|
2,747
|
3 Febrero 2024, 14:51 pm
por Parado_larga_duracion_ESP
|
|