2012-06-12 6 views
6

Я выражение формы, показанное ниже: -Тройных оператор и последовательность точек в C

while (count) 
{ 
... 
... 

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

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

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

+1

Я думаю, вы имеете в виду пункты последовательности. – SuperSaiyan

+0

Мой плохой. скорректировал это сейчас. – Zshn

+1

Почему вы даже пишете этот код, а не: 'index = (count == 20)? 0: index + 1; ' –

ответ

11

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

index = index++; 

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

+5

И наоборот: 'index = (index ++ == 20)? 0: что-то; 'является четко определенным поведением (хотя и плохой практикой программирования). – Lundin

 Смежные вопросы

  • Нет связанных вопросов^_^