名前空間
変種
操作

while ループ

From cppreference.com
< c‎ | language

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や、任意のポインタ型のヌルポインタ値は、ゼロと等しいと評価されます。

[編集] キーワード

while

[編集]

#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++ ドキュメント
English 日本語 中文(简体) 中文(繁體)