Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.