Reordenação de Operandos

A linguagem C não garante que as operações dentro de uma expressão sejam realizadas na ordem em que aparecem no código. Por exemplo, na expressão:

foo () + bar ()

foo pode ser chamada primeiro ou bar pode ser chamada primeiro. Se foo atualiza um dado e bar usa esse dado, os resultados podem ser imprevisíveis.

A ordem imprevisível de cálculo de subexpressões também faz diferença quando uma delas contém uma atribuição. Já vimos este exemplo de código problemático:

x = 20;
printf ("%d %d\n", x, x = 4);

Nesse caso, o segundo argumento, x, pode ter um valor diferente dependendo se ele for computado antes ou depois da atribuição no terceiro argumento.

Atualizado