for ステートメント (C)

for ステートメントを使用すると、指定したステートメントまたは複合ステートメントを、指定した回数だけ繰り返すことができます。 for ステートメントの本体は、省略可能な条件が false になるまで、ゼロ回以上実行されます。 for ステートメント内で省略可能な式を使用して、値を初期化し、for ステートメントの実行中に値を変更することができます。

構文

iteration-statement:
for(init-expressionopt;cond-expressionopt;loop-expressionopt)statement

for ステートメントの実行は、次のように進行します。

  1. init-expression が指定されている場合は、それが評価されます。 この式は、ループの初期化を指定します。 init-expression の型に制限はありません。

  2. cond-expression が指定されている場合は、それが評価されます。 この式は、演算型またはポインター型である必要があります。 この式は、各イテレーションの前に評価されます。 次の 3 つの結果が発生する可能性があります。

    • cond-expressiontrue (0 以外) の場合、statement が実行されます。その後、loop-expression が指定されていれば、それが評価されます。 各イテレーションの完了後に、loop-expression が評価されます。 この式の型に制限はありません。 副作用が順に実行されます。 その後、cond-expression の評価から再び処理が開始されます。

    • cond-expression を省略すると、cond-expression を true と見なして前述の説明どおりに処理が進行します。 for 引数のない cond-expression ステートメントが終了するのは、ステートメント本体内の break ステートメントまたは return ステートメントが実行されたときか、(goto ステートメント本体外にあるラベル付きステートメントへの) for が実行された場合だけです。

    • cond-expressionfalse (0) の場合、for ステートメントの実行が終了し、プログラムの次のステートメントに制御が渡されます。

また、ステートメント本体内で forbreak、または goto ステートメントが実行された場合も、return ステートメントは終了します。 continue ループ内で for ステートメントが実行されると、loop-expression が評価されます。 for ループ内で break ステートメントが実行されると、loop-expression は評価されず、実行もされません。 次のステートメント、

for( ; ; )

これは、無限ループを作成するためによく使われる方法です。breakgoto、または 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

関連項目

ステートメント