Тернарный оператор и точки последовательности в C
У меня есть выражение в форме, показанной ниже:
while (count)
{
...
...
index = ((count == 20)? 0 : index++);
...
...
}
Теперь троичные операторы являются точками последовательности в C, но я считаю, что точка последовательности заканчивается в тестовой части.
Является ли это понимание правильным и, как таковое, приведет ли это утверждение к неопределенному поведению?
1 ответ
Правильно. После оценки условия есть точка последовательности, но следующая точка последовательности - точка с запятой, завершающая оператор. Так что всякий раз, когда count != 20
, у вас есть неопределенное поведение
index = index++;
поскольку index
изменяется дважды без промежуточной точки последовательности.