みなさまご回答ありがとうございます。
質問は、文を繰り返すのは
C
1while () 2{ 3start: 4 // ループ本体 5goto start; // ループ終了時 6}
のようにブロック内で文の先頭に飛ぶのか、それとも
c
1{ 2 // ループ本体 3} 4{ 5 // ループ本体 6} 7{ 8 // ループ本体 9} 10・ 11・ 12・
のように文がいくつも並べられたような処理になるのか、ということでしたが、回答にもありましたように、複合文は一つの文だということを考えると、後者が正しいとわかりました。
ループでは、文を繰り返すときは、いったんブロックから抜けた後に、式を評価するのか、それともブロックの中から、制御式を評価するのかどちらでしょうか?
C
1while (/*制御式*/) 2{ 3 // 1 4 int n = 1; // 2 5 n++; // 3 6}
例えば、上のプログラムを実行して、何回かループするとします。
このとき、(初回ではなく、何回目かの) //1
の時点、つまり、//3
が終わって、(繰り返して)先頭に戻って、//2
を実行する前の段階では、変数n
はどうなっていますか?n
の値は2ですか? それともn
は消去されていますか?
ご存知の方がおられましたら、よろしければご回答の程よろしくお願いします。
情けないですが、投稿直後に検証方法を思いつきました。
c
1int n = 1; 2int i = 0; 3while (i++ < 10) { 4 printf("n1 : %d\n", n); 5 int n = 100; 6 printf("n2 : %d\n", n); 7} 8 9n1 : 1 10n2 : 100 11n1 : 1 12n2 : 100 13・ 14・ 15・ 16n1 : 1 17n2 : 100
繰り返す際に、ブロックから抜けないとすれば、(while文の中で宣言した変数が生きているはずだから)二回目以降の printf("n1 : %d\n", n);
は100
と表示されるはずですが、実際は、ずっと1
と表示されたことから、ループ本体で定義した変数は消されてる、つまり、処理が終わるたびにブロックから抜けていると判断しました。
ただし、細かいことはよくわからないので、質問は残しておきます。
回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/12/18 06:29