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.