Поскольку память будет выделена для int b
, но когда приложение будет запущено, «b = 20
» никогда не будет оценено.
Это потому, что switch
-statement будет прыгать вниз либо case 1:
или default:
, пропуская заявление в вопросе - таким образом b
будет неинициализированным и неопределенное поведение вызывается.
Следующие два вопроса (с их принятыми ответами) будет даже дальнейшей помощи в ваших поисках в поисках ответов:
Включение ваших предупреждений компилятора/ошибки на более высоком уровне, мы надеемся предоставить вам эту информацию при попытке скомпилировать источник.
Ниже приведено описание gcc
;
foo.cpp:6:10: error: jump to case label [-fpermissive]
foo.cpp:5:9: error: crosses initialization of 'int b'
так int a
всегда будет 1 (один), он всегда будет прыгать здесь.
Наиболее релевантные из двух ссылок, ответы на которые мне предоставлены.
Не инициализируйте b там. –
@ 0A0D Это не дубликат этого вопроса. Инициализация находится в другой части коммутатора (внутри корпуса), и верхний проголосовавший ответ здесь не применяется. – Paulpro
@ 0A0D: Нет, это не дубликат этого вопроса. Ответ на это - это синтаксическая ошибка, чтобы следовать метке case с объявлением переменной. В то время как это связано с тем, что переключатель вызывает пропущен код инициализации. – JeremyP