このコードでは、なぜ私は出力として「いくらかのガベージ値」を得ているのですか?私は宣言されているが値10 =割り当てられていないことがわかります。どうして ?内部スイッチケース - 変数定義関連
main()
{
int a =1;
switch (a)
{
int b = 10;
case 1: printf ("b = %d \n", b);
break;
}
このコードでは、なぜ私は出力として「いくらかのガベージ値」を得ているのですか?私は宣言されているが値10 =割り当てられていないことがわかります。どうして ?内部スイッチケース - 変数定義関連
main()
{
int a =1;
switch (a)
{
int b = 10;
case 1: printf ("b = %d \n", b);
break;
}
bが初期化されていません。この割り当ては、スイッチ内のどのような場合も外にあるので、その時点でスタック内にあったものを選択します。
あなたはcase文の内部変数をしたい場合は、それを行うための正しい方法は次のとおりです。
switch(a)
{
case 1:
{
int b=10; //start a new block scope
printf("b=%d",b);
}
break;
}
私は知っているが、あなたが共有している解決策は、私のニーズを変更します。あなたのコードで宣言されたint bは、他のケースではアクセスできません。とにかく、それは私が議論したいことではありません。私はちょうど私のコードが予期せぬ動作をしている理由を理解したい。 @Akshay Immanuel – Doherty
は '-Wall'でコンパイルし、警告を修正します。 – user3386109