Partilhar via


Efeitos Secundários

A ordem de avaliação das expressões é definida pela implementação específica, exceto quando a linguagem garante uma ordem particular de avaliação (conforme descrito em Precedência e Ordem de Avaliação). Por exemplo, os efeitos secundários ocorrem nas seguintes chamadas de função:

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 i = j + 2de , 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 quais caracteres são realmente passados para o myproc. Como as operações de incremento e decréscimo unárias envolvem atribuições, essas operações podem causar efeitos colaterais, como mostrado no exemplo a seguir:

x[i] = i++;

Neste exemplo, o valor de x que é modificado é imprevisível. O valor do subscrito pode ser o novo ou o antigo valor de i. O resultado pode variar sob diferentes compiladores ou diferentes níveis de otimização.

Como C não define a ordem de avaliação dos efeitos colaterais, ambos os métodos de avaliação discutidos acima estão corretos e ambos podem ser implementados. Para se certificar de que o seu código é portátil e claro, evite instruções que dependem de uma ordem específica de avaliação de efeitos secundários.

Ver também

Avaliação da Expressão