Оператор switch и инициализация переменных
этот код компилируется
int main() {
int x = 42;
switch (x){
case 1:
int d = 48;
break;
}
return 0;
}
а такой уже нет
int main() {
int x = 42;
switch (x){
case 1:
int d = 48;
break;
case 2:
break;
}
return 0;
}
prog.cpp: In function ‘int main()’:
prog.cpp:7:8: error: jump to case label [-fpermissive]
case 2:
^
prog.cpp:5:8: note: crosses initialization of ‘int d’
int d = 48;
^
почему так происходит?
Ответы (1 шт):
Автор решения: Dareten
→ Ссылка
Это происходит из-за того, что компилятор не хочет допустить ситуации, когда вы сможете обратиться к неинициализированной переменной d, чтобы избежать ошибки компиляции вы можете ограничить область видимости:
int main() {
int x = 42;
switch (x){
case 1:
{
int d = 48;
break;
}
case 2:
break;
}
return 0;
}
Либо вам нужно объявить эту переменную заранее, тогда никаких ошибок не возникнет и вы сможете работать с ней после switch