名前空間
変種
操作

for ループ

提供: cppreference.com
< c‎ | language

ループを実行します。

while ループの短縮版として使用されます。

目次

[編集] 構文

for ( init_clause ; cond_expression ; iteration_expression ) loop_statement

[編集] 説明

以下のように動作します。

  • init_clause は式または宣言にできます。
  • 式の場合、それは cond_expression の最初の評価の前に一度評価され、その結果は破棄されます。
  • (C99) 宣言の場合、それはループ本体全体 (init_clause の残り、 cond_expression 全体、 iteration_expression 全体および loop_statement 全体を含む) のスコープになります。 この宣言で宣言される変数に対しては、 auto および register 記憶域クラスのみが許されます。
  • ループ本体の前に cond_expression が評価されます。 その式の結果がゼロの場合、ループ文は直ちに終了します。
  • iteration_expression はループ本体の後に評価され、その結果は破棄されます。 iteration_expression を評価した後、制御は cond_expression に転送されます。

init_clausecond_expression および iteration_expression はすべて省略可能です。

for(;;) {
   printf("endless loop!");
}

loop_statement は省略できませんが、空文であっても構いません。

for(int n = 0; n < 10; ++n, printf("%d\n", n))
    ; // 空文

ループの実行をどこかの点で終了する必要がある場合は、 loop_statement 内の任意の場所で break 文が使用できます。

loop_statement 内の任意の場所で使用された continue 文は、制御を iteration_expression に転送します。

cond_expressioniteration_expression または loop_statementのいずれの部分にも観察可能な動作 (入出力、 volatile アクセス、アトミック操作または同期操作) がない無限ループを持つプログラムは、未定義動作です。 これは、観察可能でないすべてのループを、それが終了することを証明する必要なく、コンパイラが最適化によって削除することを可能とします。 唯一の例外は、 cond_expression が省略されているまたは定数式であるようなループです。 for(;;) は必ず無限ループです。

他のすべての選択文および繰り返し文と同様に、 for 文はブロックスコープを確立します。 init_clausecond_expression または iteration_expression で導入されたあらゆる識別子は、 loop_statement の後、スコープ外になります。

(C99以上)

[編集] キーワード

for

[編集] ノート

loop_statement として使用された式文は、 C++ と異なり、 init_clause のスコープとは別の、それ自身のブロックスコープを確立します。

for (int i = 0; ; ) {
    long i = 1;   // C では有効、 C++ では無効
    // ...
}

goto を使用してループ本体に入ることができます。 この場合、 init_clause および cond_expression は実行されません。

[編集]

#include <stdio.h>
#include <stdlib.h>
enum { SIZE = 8 };
int main(void)
{
    int array[SIZE];
    for(size_t i = 0 ; i < SIZE; ++i)
        array [i] = rand() % 2;
    printf("Array filled!\n");
    for (size_t i = 0; i < SIZE; ++i)
        printf("%d ", array[i]);
    printf("\n");
}

出力例:

Array filled!
1 0 1 1 1 1 0 0

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 6.8.5.3 The for statement (p: 151)
  • C99 standard (ISO/IEC 9899:1999):
  • 6.8.5.3 The for statement (p: 136)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 3.6.5.3 The for statement

[編集] 関連項目

for ループC++リファレンス