2016-11-04 9 views
-2

このコードでは、なぜ私は出力として「いくらかのガベージ値」を得ているのですか?私は宣言されているが値10 =割り当てられていないことがわかります。どうして ?内部スイッチケース - 変数定義関連

main() 
{ 
int a =1; 
switch (a) 
{ 
int b = 10; 
case 1: printf ("b = %d \n", b); 
break; 
} 
+1

は '-Wall'でコンパイルし、警告を修正します。 – user3386109

答えて

3

bが初期化されていません。この割り当ては、スイッチ内のどのような場合も外にあるので、その時点でスタック内にあったものを選択します。

+0

宣言が翻訳者によって既に行われている間に、実行段階で割り当てが行われていると言ったら間違っていますか?実行中にランダム値がスタックから取得されます。 – Doherty

+0

翻訳者が既に宣言をしている間に、実行段階で割り当てが行われていると言ったら間違っていますか?実行中にランダムな値がスタックから取得されますか? @Pablo Alcubilla – Doherty

+0

それだけです。コンパイラは、すべての変数にメモリを割り当てます。その後、実行時に初期化されます。 –

1

あなたはcase文の内部変数をしたい場合は、それを行うための正しい方法は次のとおりです。

switch(a) 
{ 
case 1: 
{ 
    int b=10; //start a new block scope 
    printf("b=%d",b); 
} 
break; 
} 
+0

私は知っているが、あなたが共有している解決策は、私のニーズを変更します。あなたのコードで宣言されたint bは、他のケースではアクセスできません。とにかく、それは私が議論したいことではありません。私はちょうど私のコードが予期せぬ動作をしている理由を理解したい。 @Akshay Immanuel – Doherty

関連する問題