Comments 9
А default: — религия не позволяет?
+1
Позволяет, конечно, только в форме default: assert(0);
так и было сделано, но было интересно попробовать по другому.
так и было сделано, но было интересно попробовать по другому.
+1
default: assert(0) в вашем случае будет ошибочным, потому что по enNone ничего делать не надо, ибо это не ошибка.
достаточно просто default:
достаточно просто default:
0
Так оно до assert(0) и не дойдёт никогда, поэтому ошибка никогда не сгенерируется, но да, писать так всё равно не нужно.
0
=) почему не нужно — нужно, если предполагается, что enNone невалидное значение.
Судя же по первому варианту кода — enNone вполне валидное значение, но по нему ничего не должно происходить — вот и не надо assert(0) ставить.
Судя же по первому варианту кода — enNone вполне валидное значение, но по нему ничего не должно происходить — вот и не надо assert(0) ставить.
0
У меня в конечном итоге получился следующий вариант:
default конечно, никогда не выполнится, вплоть до последующего изменения типа, но тогда assert отловит эту ситуацию при тестах.
Именно поэтому он там необходим.
if(enNone!=Enum)
{
switch(Enum)
{
case enOne:
Value=f1(Value);
break;/*enOne*/
case enTwo:
Value=f2(Value);
break;/*enTwo*/
case enThree:
Value=f3(Value);
break;/*enThree*/
default:assert( 0 );
break;
}/*SWITCH*/
Value=A*Value+B;
}/*THEN*/
default конечно, никогда не выполнится, вплоть до последующего изменения типа, но тогда assert отловит эту ситуацию при тестах.
Именно поэтому он там необходим.
+1
Да не, я имел ввиду, что часть default в таком коде никогда не выполнится — выше цикл по условию "!=enNone", а остальные значения «отловятся» выше в ветках switch-case. Потому и не важно что там стоит. Но ниже, кстати, автор прав — если в будущем возможно расширение перечисления, то assert вроде как и к месту вполне, тут я соглашусь всё же.
0
Устройство Даффа — это метод оптимизации циклов. У Вас тут не цикл, а обычное ветвление, так что метка не совсем в тему.
0
Sign up to leave a comment.
Забавы с оператором switch