Тернарный оператор и точки последовательности в C

У меня есть выражение в форме, показанной ниже:

while (count)
{
...
...

    index = ((count == 20)? 0 : index++);
...
...
}

Теперь троичные операторы являются точками последовательности в C, но я считаю, что точка последовательности заканчивается в тестовой части.

Является ли это понимание правильным и, как таковое, приведет ли это утверждение к неопределенному поведению?

1 ответ

Правильно. После оценки условия есть точка последовательности, но следующая точка последовательности - точка с запятой, завершающая оператор. Так что всякий раз, когда count != 20, у вас есть неопределенное поведение

index = index++;

поскольку index изменяется дважды без промежуточной точки последовательности.

Другие вопросы по тегам