Рассмотрим C-код, где foo
является int
:Объявления в переключатель заявлении
switch(foo){
case 1: {
int bla = 255;
case 2:
printf("case12 %d\n", bla);
break;
case 3:
printf("case3 %d\n", bla);
}
};
Для различных значений foo
кода дает следующий результат:
case12 255 # foo=1
case12 255 # foo=2
case3 0 # foo=3
У меня есть понимание проблемы foo=3
. Строка, объявляющая bla
и определяющая ее значение, не должна выполняться, когда foo=3
. Оператор switch должен перейти прямо к метке для case 3:
. Однако предупреждения нет, поэтому bla
, по-видимому, объявлен как минимум. Он может быть использован неинициализированным, и его значение просто 0
. Можете ли вы объяснить, что происходит в «случае 3», и почему это законный C-код?
Вы Дон» t нужна точка с запятой после последнего '}'. –
Как ни странно, GCC принимает код в режиме C (с предупреждением), но отклоняет его в режиме C++. – HolyBlackCat
Не так странно: http://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement?rq=1 – melpomene