จริงๆ แล้วประกาศตัวแปรใน switch statement ได้ แต่ต้องอยู่ในขอบเขตใหม่ (new scope) ภายใน case label
ตัวอย่างที่ถูกต้อง
#include <iostream>
using namespace std;
int main() {
int i = 10;
switch (i) {
case 2:
// some code
break;
case 10: {
int x = 13;
cout << x;
}
}
return 0;
}ผลลัพธ์
13
หากประกาศตัวแปรนอก block ใน case เดียวกัน จะเกิดข้อผิดพลาด เพราะ goto case label ทำให้ข้ามการประกาศตัวแปรโลคัลได้ ซึ่งอาจนำไปสู่การใช้ตัวแปรที่ยังไม่ได้เริ่มต้นค่า