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?