Побочные эффекты
Операции присваивания в сложных выражениях могут вызывать побочные эффекты, так как они
изменяют значение переменной. Побочный эффект может возникать и при вызове функции, если
он содержит прямое или косвенное присваивание (через указатель). Это связано с тем, что
аргументы функции могут вычисляться в любом порядке. Например, побочный эффект имеет
место в следующем вызове функции:
prog (a,a=k*2);
В зависимости от того, какой аргумент вычисляется первым, в функцию могут быть переданы
различные значения.
Порядок вычисления операндов некоторых операций зависит от реализации и поэтому могут
возникать разные побочные эффекты, если в одном из операндов используется операции
увеличения или уменьшения, а также другие операции присваивания.
Например, выражение i*j+(j++)+(--i) может принимать различные значения при обработке
разными компиляторами. Чтобы избежать недоразумений при выполнении побочных эффектов
необходимо придерживаться следующих правил.
1. Не использовать операции присваивания переменной в вызове функции, если эта
переменная участвует в формировании других аргументов функции.
2. Не использовать операции присваивания переменной в выражении, если эта переменная
используется в выражении более одного раза.