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
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:
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