for ステートメントを使用すると、指定したステートメントまたは複合ステートメントを、指定した回数だけ繰り返すことができます。
for ステートメントの本体は、省略可能な条件が false になるまで、ゼロ回以上実行されます。
for ステートメント内で省略可能な式を使用して、値を初期化し、for ステートメントの実行中に値を変更することができます。
構文
iteration-statement=
for
(
init-expression
opt;cond-expressionopt;loop-expression選ぶ)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 と見なして前述の説明どおりに処理が進行します。for引数のないcond-expressionステートメントが終了するのは、ステートメント本体内のbreakステートメントまたはreturnステートメントが実行されたときか、(gotoステートメント本体外にあるラベル付きステートメントへの)forが実行された場合だけです。cond-expressionがfalse(0) の場合、forステートメントの実行が終了し、プログラムの次のステートメントに制御が渡されます。
また、ステートメント本体内で for、break、または goto ステートメントが実行された場合も、return ステートメントは終了します。
continue ループ内で for ステートメントが実行されると、loop-expression が評価されます。
break ループ内で for ステートメントが実行されると、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;
}
Output
Number of spaces: 4
Number of tabs: 2