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 (como se indica en Prioridad y orden de evaluación). Por ejemplo, en las siguientes llamadas de función se producen efectos secundarios:

add( i + 1, i = j + 2 );
myproc( getc(), getc() );

Los argumentos de una llamada de función se pueden evaluar en cualquier orden. Puede que la expresión i + 1 se evalúe antes que i = j + 2 o que i = j + 2 se evalúe antes que i + 1. En función de la elección, el resultado es diferente. De igual manera, no es posible garantizar qué caracteres se pasan realmente a myproc. Dado que las operaciones de incremento y decremento unario implican asignaciones, 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 que se modifica es imprevisible. El valor del subíndice podría ser el valor nuevo o antiguo de i. El resultado puede variar según los distintos compiladores o los diferentes niveles de optimización.

Dado que C no define el orden de evaluación de efectos secundarios, los dos métodos de evaluación descritos anteriormente son correctos y se puede implementar cualquiera de ellos. Para asegurarse de que el código sea portátil y claro, evite las instrucciones que dependan de un orden de evaluación concreto para los efectos secundarios.

Vea también

Evaluación de expresiones