while ループ
expression の値がゼロと等しくなるまで、statement を繰り返し実行します。テストは各イテレーションの前に実行されます。
目次 |
[編集] 構文
attr-spec-seq(任意) while ( expression ) statement |
|||||||||
| 式 | - | スカラ型の任意の式。この式は各イテレーションの前に評価され、ゼロと等しいと評価された場合、ループは終了します。 |
| statement | - | 任意の文。通常は複合文であり、ループの本体として機能します。 |
| attr-spec-seq | - | (C23)ループ文に適用される、属性の任意のリスト。 |
[編集] 解説
while 文は、expression(「制御式」とも呼ばれる)がゼロと等しいと評価されるまで、statement(「ループ本体」とも呼ばれる)を繰り返し実行させます。この繰り返しは、ループ本体が通常通り入られたか、statement の途中に goto で入られたかに関わらず発生します。
expression の評価は、statement の各実行前に行われます(goto で入った場合を除く)。制御式をループ本体の後に評価する必要がある場合は、do-while ループを使用できます。
ループの実行をある時点で終了させる必要がある場合、終了文として break 文を使用できます。
ループの実行をループ本体の末尾で継続する必要がある場合、ショートカットとして continue 文を使用できます。
無限ループを持つプログラムのstatementまたはexpressionのどの部分にも観測可能な振る舞い(I/O、volatileアクセス、アトミックまたは同期操作)がない場合、その動作は未定義です。これにより、コンパイラは終了することを証明せずに、観測不可能なループをすべて最適化で削除できます。唯一の例外は、expressionが定数式であるループです。while(true)は常に無限ループです。
|
他のすべての選択文や反復文と同様に、while 文はブロックスコープを確立します。expressionで導入された識別子は、statementの後にスコープ外になります。 |
(C99以降) |
[編集] 注意
真偽値やポインタの式は、ループの制御式としてよく使われます。真偽値のfalseや、任意のポインタ型のヌルポインタ値は、ゼロと等しいと評価されます。
[編集] キーワード
[編集] 例
#include <stdio.h> #include <stdlib.h> #include <string.h> enum { SIZE = 8 }; int main(void) { // trivial example int array[SIZE], n = 0; while(n < SIZE) array[n++] = rand() % 2; puts("Array filled!"); n = 0; while(n < SIZE) printf("%d ", array[n++]); printf("\n"); // classic strcpy() implementation // (copies a null-terminated string from src to dst) char src[] = "Hello, world", dst[sizeof src], *p = dst, *q = src; while((*p++ = *q++)) // double parentheses (that are not strictly necessary) // used to suppress warnings, ensuring that this is an // assignment (as opposed to a comparison) by intention, // whose result is used as a truth value ; // null statement puts(dst); }
出力
Array filled! 1 0 1 1 1 1 0 0 Hello, world
[編集] 参照
- C17標準 (ISO/IEC 9899:2018)
- 6.8.5.1 The while statement (p: 109)
- C11標準 (ISO/IEC 9899:2011)
- 6.8.5.1 The while statement (p: 151)
- C99標準 (ISO/IEC 9899:1999)
- 6.8.5.1 The while statement (p: 136)
- C89/C90標準 (ISO/IEC 9899:1990)
- 3.6.5.1 The while statement
[編集] 関連項目
while ループのC++ ドキュメント |