for ステートメント (C)
for ステートメントを使用すると、指定したステートメントまたは複合ステートメントを、指定した回数だけ繰り返すことができます。 for ステートメントの本体は、省略可能な条件が false になるまで、ゼロ回以上実行されます。 for ステートメント内で省略可能な式を使用して、値を初期化し、for ステートメントの実行中に値を変更することができます。
構文
- iteration-statement:
for ( init-expression opt ; cond-expressionopt ; loop-expression opt )statement
for ステートメントの実行は、次のように進行します。
init-expression が指定されている場合は、それが評価されます。 この式は、ループの初期化を指定します。 init-expression の型に制限はありません。
cond-expression が指定されている場合は、それが評価されます。 この式は、演算型またはポインター型である必要があります。 この式は、各イテレーションの前に評価されます。 次の 3 つの結果が発生する可能性があります。
cond-expression が true (0 以外) の場合、statement が実行されます。その後、loop-expression が指定されていれば、それが評価されます。 各イテレーションの完了後に、loop-expression が評価されます。 この式の型に制限はありません。 副作用が順に実行されます。 その後、cond-expression の評価から再び処理が開始されます。
cond-expression を省略すると、cond-expression を true と見なして前述の説明どおりに処理が進行します。 cond-expression 引数のない for ステートメントが終了するのは、ステートメント本体内の break ステートメントまたは return ステートメントが実行されたときか、(for ステートメント本体外にあるラベル付きステートメントへの) goto が実行された場合だけです。
cond-expression が false (0) の場合、for ステートメントの実行が終了し、プログラムの次のステートメントに制御が渡されます。
また、ステートメント本体内で break、goto、または return ステートメントが実行された場合も、for ステートメントは終了します。 for ループ内で continue ステートメントが実行されると、loop-expression が評価されます。 for ループ内で break ステートメントが実行されると、loop-expression は評価されず、実行もされません。 次のステートメント、
for( ;; )
は、break、goto、または return のいずれかのステートメントによってしか終了できない無限ループを発生させる、よく使用される方法です。
コード
for ステートメントの例を次に示します。
// c_for.c
int main()
{
char* line = "H e \tl\tlo World\0";
int space = 0;
int tab = 0;
int i;
int max = strlen(line);
for (i = 0; i < max; i++ )
{
if ( line[i] == ' ' )
{
space++;
}
if ( line[i] == '\t' )
{
tab++;
}
}
printf("Number of spaces: %i\n", space);
printf("Number of tabs: %i\n", tab);
return 0;
}
出力
Number of spaces: 4
Number of tabs: 2