転載:switch/case文では、各caseにかっこを付ける
1561 ワード
前言
多くのコードを書いてこそ、問題を発見することができ、既存のコードでも、手を打っても収穫があり、これは非常に無言の問題に遭遇しません.
問題と原因、解決方法は以下の転載内容を参照してください.
オリジナル:ChirlChen
ブログアドレス:https://blog.csdn.net/qqmindyourwill/article/details/52815886
転載内容問題の説明:switch-caseで定義されたローカル変数(次の例の「case ECOLOR_REDコード1で定義されたtemp変数」のように、通常のコードの書き込み中によく発生します.)をクリックします.前に本の中でこの問題に言及したことがあることを見て、しかし長い間C++を書いていないで、具体的にどういうことを忘れて、今度使ってやっと分かりました.后で万一忘れて便利に调べるために、わざわざ说明を书きます. ソリューション:具体的な解決策は、上記のコード例の「case ECOLOR_GREEN」のように、caseに「{}」を加えて、ローカル変数をコードブロックに定義することで、問題を解決することができます. 理由: は、switchに含まれるコード全体が同じコードブロックに属するため、caseごとにコードブロックを表すのではなく、同じコードブロックに属する. は、上記のコードセグメントの第1のケースで定義する変数tempに従って、同じコードブロックの「case ECOL_BLUE」内部でもこの変数を参照することができ(上のコード3に示すように)、switchから送られてきたタグ値「color==ECOLOR_BLUE」の場合、コード3で定義されていない変数「temp」を参照することになる.VC 10コンパイラは比較的友好的であり、「error C 2300:“b”の初期化操作は「case」によるラベルスキップ」は、ここで説明した場合を指します. ですので、上のコード1、3はすべて間違っています.正しい使い方はコード2のやり方に従って、「temp」変数を使う必要があるコードを括弧で囲んで、コードブロックを構成し、このコードブロックを超えた後、この変数は失効します.
多くのコードを書いてこそ、問題を発見することができ、既存のコードでも、手を打っても収穫があり、これは非常に無言の問題に遭遇しません.
問題と原因、解決方法は以下の転載内容を参照してください.
オリジナル:ChirlChen
ブログアドレス:https://blog.csdn.net/qqmindyourwill/article/details/52815886
転載内容
switch(color)
{
case ECOLOR_RED:
int temp = 10; //1: case ERROR;
……
do something;
……
break;
case ECOLOR_GREEN:
{
int temp = 20; //2: case RIGHT;
……
do something;
……
}
break;
case ECOLOR_BLUE:
cout << "temp = " << temp << endl; //3: , ERROR
……
break;
default:
……
break;
}