Efeitos colaterais
A ordem de avaliação de expressões é definida pela implementação específica, exceto quando a linguagem garante uma determinada ordem de avaliação (conforme descrito no precedência e a ordem de avaliação).Por exemplo, efeitos colaterais ocorrerão as chamadas de função a seguir:
add( i + 1, i = j + 2 );
myproc( getc(), getc() );
Os argumentos de uma chamada de função podem ser avaliados em qualquer ordem.A expressão i + 1 pode ser avaliada antes de i = j + 2, ou i = j + 2 pode ser avaliada antes de i + 1.O resultado é diferente em cada caso.Da mesma forma, não é possível garantir que caracteres, na verdade, são passadas para o myproc.Desde unário increment e decrement operações envolvem atribuições, tais operações podem causar efeitos colaterais, como mostrado no exemplo a seguir:
x[i] = i++;
Neste exemplo, o valor de x ou seja modificado é imprevisível.O valor da subscrição poderia ser o novo ou o valor antigo de i.O resultado pode variar em diferentes compiladores ou níveis de otimização diferentes.
Como o c não define a ordem de avaliação de efeitos colaterais, ambos os métodos de avaliação discutidos acima estão corretos e qualquer um pode ser implementado.Para certificar-se de que seu código é portátil e clara, evite declarações que dependem de uma determinada ordem de avaliação com efeitos colaterais.