При чтении Язык программирования C, я заметил в приоритете порядке раздела оценки говорится, что»... вызовы функций, вложенные операторы присваивания и приращения и уменьшения вызывают "побочные эффекты"...".Вложенные операторы присваивания и побочные эффекты
Я пытаюсь найти несколько примеров вложенных операторов присваивания, которые приводят к неопределенному поведению. В книге говорится следующее является нормально:
int nl, nw, nc;
nl = nw = nc = 0;
в этом nl
, nw
и nc
все будут назначены 0
.
Затем я наткнулся на this, который гласит:
x = y = y = z/3;
ли не "рекомендуемое". Итак, мой вопрос: что может пойти не так с этим утверждением? Назначения ассоциируют с правой стороны, так что утверждение будет эквивалентно:
x = (y = (y = z/3));
Ко мне, кажется, довольно ясно, что y = z/3
и x = z/3
. Итак, если это так, то может ли кто-нибудь дать мне пример вложенного оператора присваивания, который может привести к неопределенному поведению, а если нет, можете ли вы объяснить, почему предыдущий оператор не определен.
В 'x = y = y = z/3;', не является ли значение 'y' технически установленным дважды между точками последовательности? Кажется, я понимаю суть того, что вы говорите. – Justin
Но в обоих случаях оно устанавливается одинаково, поэтому порядок, в котором они происходят, несуществен. – Barmar