Efectos secundarios
El orden de evaluación de expresiones está definido por la implementación concreta, excepto cuando el lenguaje garantiza un orden concreto de evaluación (de acuerdo con Prioridad y orden de evaluación).Por ejemplo, los efectos secundarios aparecen en las siguientes llamadas de función:
add( i + 1, i = j + 2 );
myproc( getc(), getc() );
Los argumentos de una llamada de función se pueden evaluar en cualquier orden.la expresión i + 1 se puede evaluar antes de i = j + 2, o i = j + 2 se puede evaluar antes de i + 1.el resultado es diferente en cada caso.Igualmente, no es posible garantizar lo que se pasan los caracteres realmente a myproc.Puesto que el operador unario de incremento y decremento las asignaciones implica las operaciones, tales operaciones pueden producir efectos secundarios, tal y como se muestra en el ejemplo siguiente:
x[i] = i++;
En este ejemplo, el valor de x modifica ese es imprevisible.El valor de subíndice podría ser el nuevo o valor anterior de i.El resultado puede variar según los distintos compiladores o diferentes niveles de optimización.
Puesto que C no define el orden de evaluación de efectos secundarios, ambos métodos de evaluación descritos anteriormente son correctos y cualquiera puede implementar.Para asegurarse de que el código sólo portátil y desactive, evite las instrucciones que dependen de un orden concreto de evaluación para los efectos secundarios.