ホームページ > バックエンド開発 > C++ > switch ステートメントで「Jump to Case Label」エラーが発生するのはなぜですか?

switch ステートメントで「Jump to Case Label」エラーが発生するのはなぜですか?

Linda Hamilton
リリース: 2024-10-29 04:19:29
オリジナル
620 人が閲覧しました

Why Does

Switch ステートメントの Case ラベルへのジャンプ エラー

コンパイル エラー「Jump to case ラベル」が発生した場合は、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 の宣言に問題が生じています。ケース 2 では i が表示されますが、初期化されません。これは、初期化コードがそれぞれのケースに固有であるためです。したがって、選択肢が 2 の場合、後続のコードで i を使用すると、予期しない結果が生じる可能性があります。

この問題を解決するには、それぞれの場合に明示的なブロックを使用します。

<code class="cpp">switch(choice)
{
  case 1:
    {
        int i=0;
        break;
    }
  case 2:
    {
        // Use of i only within this block
    }
}</code>
ログイン後にコピー

あるいは、次のようにします。 switch ステートメントに似た goto ステートメントを利用できます。

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート