Thực tế có thể khai báo biến trong switch, nhưng phải đặt trong khối mới (scope mới) bằng cặp ngoặc nhọn { }.
Ví dụ đúng
#include <iostream>
using namespace std;
int main() {
int i = 10;
switch(i) {
case 2:
// code
break;
case 10: {
int x = 13; // Khai báo trong khối mới
cout << x;
}
}
return 0;
}
13
Tại sao cần khối mới?
case bản chất là nhãn (label), switch nhảy đến nhãn (giống goto). Nếu khai báo biến ngay trong scope của switch (không có { }), việc nhảy qua lệnh khai báo (khi case khác match) vi phạm quy tắc C/C++: không được nhảy qua khởi tạo biến trong cùng scope.
Khuyến nghị: Luôn bọc code trong case bằng { } nếu cần khai báo biến.