Switch 语句中跳转到 case 标签错误
当遇到编译错误“Jump to case label”时,必须仔细检查 switch 语句的结构。当尝试在一种情况下声明扩展到后续情况的变量而不使用显式块分隔符(用大括号 ({ }) 表示)时,就会出现此错误。
例如,请考虑以下代码:
<code class="cpp">#include <iostream> int main() { int choice; std::cin >> choice; switch(choice) { case 1: int i=0; break; case 2: // error here // Code relying on the existence of i } }</code>
在此示例中,问题源于情况 1 中 i 的声明。虽然 i 在情况 2 中可见,但它不会被初始化。这是因为初始化代码是特定于每种情况的。因此,如果选择为 2,在后续代码中使用 i 可能会导致意外结果。
要解决此问题,请为每种情况使用显式块:
<code class="cpp">switch(choice) { case 1: { int i=0; break; } case 2: { // Use of i only within this block } }</code>
或者,可以使用 goto 语句,类似于 switch 语句:
<code class="cpp">int main() { if(rand() % 2) // Toss a coin goto end; int i = 42; end: // Similar scope and initialization issues as with switch, but with goto std::cout << i; }</code>
本质上,显式块或仔细使用 goto 可确保变量声明和初始化本地化到预期情况,从而防止错误行为。
以上是为什么 Switch 语句会出现“Jump to Case Label”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!