お世話になっています。
特に問題が出て困っているという訳ではないのですが、謎な現象が発生したので、何故このような動作になるのか、知りたい次第です。
以下のようなプログラムがあります。
C
1void main() 2{ 3 int i = 0; 4 5 if (i == 0) // ←---① 6 { 7 int test = 123; // ←---② 8 char str[] = "sss", i; // ←---③ 9 } 10}
上記のプログラムをデバッグで実行し、①の行にブレークポイントをつけて止めます。
iの中身は、その時はもちろん0です。
しかし、ステップオーバーを行い②の行に行くと、変数iがなぜかchar型に変わり(ウォッチの種類がcharになっています)、値が[-52'フ']に変更されます。
③の部分の記述が明らかにおかしいので、そこが悪さをしているのだとは分かるのですが(実際、,i の部分を消すとiの値は0となります)
②の行で止めているときはまだ③の行は実行されていないはずです。
なのに、if文に入ると何故iの値が変更されてしまうのでしょうか。
また、変数 = xxx,xxx;のような書き方は、どのような動作となるのでしょうか。
int a = 1,2
とすると、識別子が必要ですとエラーが出てビルドできません。
③の行がそもそも何故エラーとならないのかも分かりません。
また、①をfor文にしても同じ結果となりました。
実行環境はvisual studio 2017です。
初歩的な勘違いをしているかもしれませんが、よろしくお願いします。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/19 10:39