(準備中)
C言語のForループは旧BasicのForループと仕様的にかなり異なる部分もあり、
スゴ技(というか場合によっては落とし穴)があります。
Forループの基本構文は繰り返し処理と条件分岐をご参照下さい。
またForループの実用的な使い方は無条件分岐と補助制御文をご参照下さい。
FOR文の構文は、
FOR (式1; 式2; 式3)
ですが、式1で複数の式を書いて複数の変数を初期化したり、式2の終了判定条件で演算をしてループを回るごとに、
終了判定条件を変更したり、式3の更新条件でいろいろ実行させたりすることが可能です。
CのFor文では、式1はForループに入るときに1回だけ実行され、式2の終了判定条件はForループに入るたびに
最初に実行されます。そして式3はForループが終わりまでいく度に実行されます。
以下のtricfor.cでは式2の終了判定条件はループを回るたびに条件が変更されています。
式3ではprintfで変数を表示させています。
<tricfor.c>
#include <stdio.h> int main() { int i,j; for (i=0,j=10;i<j--;i++,printf("i:%d, j:%d\n",i,j)){} return 0; }
実行例(Borland C++55でコンパイル)
変数i,jがループを回るたびに更新され、jが5になったのを最後にForループを抜けています。
旧BasicとCのForループは仕様的に結構異なります。
旧BASICでは以下のプログラムにおいて、
20行目のfor文で終了条件は10に確定してしまうので、30行目でJを減少させても
このループはI=10になるまで回ります。
10 J=10
20 for I=0 to J
30 J=J-1
40 NEXT
(※)BASICのForループについてはForループの落とし穴をご参照。
その他、goto文でForループに飛び込むという魔王クラスの悪魔コード
JavaScriptなどCの影響を受けているプログラム言語のFor文はCに近い仕様です。
goto文で多重ループから一気に飛び出すということはたまにありますが、goto文でforループに
飛び込んでいくというのはまずないでしょう。
旧Basicではgoto文でforループに飛び込むことはできませんでしたが(エラーになる)、C言語では
一応可能です。
以下のgototest.cでは、i = 5の状態でforループの中に飛び込んでいきます。
実行結果を見ると、初期化のための式1はスルーされて、i = 5の状態からループを
回り始めて、iが9の時までループを回って終了しています。
goto文でforループに飛び込めるというのはすごい仕様です。
<gototest.c>
#include <stdio.h> int main() { int i; i=5; goto label; for (i=0;i<10; i++) { label: printf("%d", i); } }
実行結果