for loop
ループを実行します。
whileループ の短縮版として使用されます。
目次 |
構文
attr-spec-seq
(C23以降)
(オプション)
for
(
init-clause
;
cond-expression
;
iteration-expression
)
loop-statement
|
|||||||||
説明
以下のように動作します:
- init-clause は式 または宣言 (C99以降) である可能性があります。
-
- init-clause は式であり、最初の cond-expression の評価前に一度だけ評価され、その結果は破棄されます。
|
(C99以降) |
- cond-expression はループ本体の前に評価されます。式の結果がゼロの場合、ループ文は直ちに終了します。
- iteration-expression はループ本体の後に評価され、その結果は破棄されます。 iteration-expression の評価後、制御は cond-expression に移ります。
init-clause 、 cond-expression 、および iteration-expression はすべて省略可能です。 cond-expression が省略された場合、非ゼロの整数定数で置き換えられ、これによりループは無限になります:
for(;;) { printf("無限ループ!"); }
loop-statement は省略可能ではありませんが、null文でも構いません:
for(int n = 0; n < 10; ++n, printf("%d\n", n)) ; // 空文
ループの実行をある時点で終了する必要がある場合、 break statement は loop-statement 内の任意の場所で使用できます。
continue文 は loop-statement 内のどこで使用されても、制御を iteration-expression に移します。
観測可能な動作(I/O、volatileアクセス、原子操作または同期操作)を一切含まない無限ループは、その cond-expression 、 iteration-expression または loop-statement のいずれの部分においても未定義動作を引き起こします。これにより、コンパイラはループの終了を証明することなく、すべての観測不可能なループを最適化して除去することが可能となります。唯一の例外は、 cond-expression が省略されているか、定数式である場合のループです。 for ( ;; ) は常に無限ループとなります。
|
他のすべての選択文および反復文と同様に、for文は ブロックスコープ を確立する: init-clause 、 cond-expression 、または iteration-expression で導入された任意の識別子は、 loop-statement の後にスコープ外となる。 |
(C99以降) |
|
attr-spec-seq
はオプションの
属性
リストであり、
|
(C23以降) |
キーワード
注記
loop-statement として使用される式文は、C++とは異なり、 init-clause のスコープとは区別された独自のブロックスコープを確立します:
for (int i = 0; ; ) { long i = 1; // 有効なC、無効なC++ // ... }
goto を使用してループ本体に入ることが可能です。この方法でループに入る場合、 init-clause および cond-expression は実行されません。(その後、制御がループ本体の終端に達した場合、 cond-expression の実行を含む繰り返しが発生する可能性があります。)
例
出力例:
Array filled! 1 0 1 1 1 1 0 0
参考文献
- C17規格 (ISO/IEC 9899:2018):
-
- 6.8.5.3 for文 (p: 110)
- C11規格 (ISO/IEC 9899:2011):
-
- 6.8.5.3 for文 (p: 151)
- C99規格 (ISO/IEC 9899:1999):
-
- 6.8.5.3 for文 (p: 136)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 3.6.5.3 for文
関連項目
|
C++ ドキュメント
for
for
ループ
|
`タグ内の"for"は翻訳せず、その後の"loop"のみを翻訳)
注意事項に従い:
- HTMLタグ、属性はそのまま保持
- `
`タグ内の"for"はC++キーワードのため翻訳せず
- フォーマットと構造は完全に維持
- 専門的な用語は適切に翻訳