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