for 文

while文はシンプルな構造ですが、多くの繰り返し処理には、繰り返し回数を数えるためのカウンタ変数の制御が必要になります。カウンタ変数の初期化や、インクリメント処理は、繰り返し文の管理に用いられるコードであり、繰り返し処理の本来の目的のためのコードではありません。これらは、分離するべきです。

for文は、変数の初期化やインクリメントを構文でサポートしている文です。実践では、while文やdo文よりもfor文が使われる傾向にあります。for文は、次のように3つの式を持つ繰り返し文です。

for ( 式opt ; 式opt ; 式opt ) 文

forキーワードに続き、括弧 ( ) 内にセミコロン ; 区切りで3つの式を指定します。式は、左から順に初期化式、制御式、インクリメント式などと呼ばれることもあります。for文が実行されると、最初に左側の初期化式が実行されます。どのような式を書くかは任意ですが、主にカウンタ用の変数に初期値を代入する式を記述します。中央の制御式はwhile文などで使われている式と同じです。この式が0以外の値であれば文の実行を繰り返します。右の式は、文の実行が終わった後に評価されます。一般に、ここにカウンタ変数のインクリメント式を記述します。

一般的なfor文は、次のように書かれるでしょう。このとき、事前に整数型の変数 i が宣言されているものとします。

for (i = 0 ; i < 10 ; i++) ...

初期化式 i = 0 は、for文実行時に1度だけ実行されます。よって、変数 i は0から始まります。次にi < 10が評価され、iは0なので条件が満たされます。この式が0以外であれば、繰り返し対象の文が実行されます。この点はwhile文と同じです。繰り返し対象の文の実行が終わると、インクリメント式 i++ が実行され、i の値がインクリメントされます。インクリメント式を実行した後、再び制御式が評価され、条件が満たされていれば文が実行されます。これを繰り返して、やがて i が10になった時点でfor文の制御から抜け出します。

サンプル 05

#include <stdio.h>

int main(void)
{
    int i;

    for(i = 0 ; i < 10 ; i++) printf("i = %d\n", i);

    return 0;
}

実行結果

サンプル05の実行結果はサンプル02と同じものです。サンプル02で書いたwhile文の処理と、同じことをfor文を用いて行っています。for文の式の評価順序を、正しく理解することが重要です。ちなみに、for文の式は省略可能です。初期化やインクリメントが不要であれば、その部分の式を省略しても構いません。制御式を省略した場合は、無条件で文を実行し続けます。この場合、強制的にfor文を抜け出す手段を提供しなければ無限ループとなってしまいます。