Подтвердить что ты не робот

Является ли поведение `y = x = x + 1;` undefined?

Как гласит название,

y = x = x + 1;

undefined поведение в C?

4b9b3361

Ответ 1

Отвечайте на свой вопрос
Нет.

Что произойдет
Это произойдет:

int x = 1; /* ASSUME THIS IS SO */
y = x = x + 1;

/* Results: */
y == 2;
x == 2;

Как он компилирует
То же, что:

x += 1;
y = x;

Почему это не undefined
Поскольку вы не пишете x в том же выражении, вы его читаете. Вы просто установите его себе + 1, затем присвойте y значению x.

Ваше будущее
Если вы обнаружите, что код запутан, вы можете использовать круглые скобки для чтения:

y = x = (x + 1);

Ответ 2

Нет, ваше выражение правильно определено. Вероятно, вы искали y = x = x++;, а это не так.

Ответ 3

Нет. Вы изменяете только x один раз, и из-за правильной ассоциативности = это присвоение происходит до назначения на y. Даже если это произошло, есть еще одна модификация x. Ваше выражение является законным как y = ++x.