Share via


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