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