Namespaces
Variants

while loop

From cppreference.net

expression 의 값이 0이 될 때까지 statement 를 반복적으로 실행합니다. 각 반복 전에 조건 검사가 수행됩니다.

목차

구문

attr-spec-seq (선택 사항) while ( expression ) statement
expression - 표현식 스칼라 타입 의 모든 표현식. 이 표현식은 각 반복 전에 평가되며, 0과 비교하여 같으면 루프가 종료됩니다.
statement - 구문 중 모든 구문으로, 일반적으로 복합 구문이며 루프의 본문 역할을 합니다.
attr-spec-seq - (C23) 속성 의 선택적 목록으로, 루프 구문에 적용됩니다.

설명

A while 문은 statement (또한 루프 본문 이라고 함)이 expression (또한 제어 표현식 이라고 함)이 0과 같을 때까지 반복적으로 실행되도록 합니다. 이 반복은 루프 본문이 정상적으로 진입되었는지 또는 goto 를 통해 statement 의 중간으로 진입했는지에 관계없이 발생합니다.

expression 의 평가는 statement 의 각 실행 전에 발생합니다(goto로 진입한 경우 제외). 제어식이 루프 본문 이후에 평가되어야 하는 경우, do-while 루프 를 사용할 수 있습니다.

루프 실행을 특정 지점에서 종료해야 하는 경우, break statement 를 종료 문으로 사용할 수 있습니다.

루프 실행을 루프 본문 끝에서 계속해야 하는 경우, continue 문 을 단축키로 사용할 수 있습니다.

관찰 가능한 동작(I/O, volatile 접근, atomic 또는 동기화 연산)이 없는 무한 루프를 가진 프로그램은 해당 루프의 statement expression 어느 부분에서도 관찰 가능한 동작이 없는 경우 미정의 동작을 가집니다. 이는 컴파일러가 종료된다는 것을 증명하지 않고도 모든 관찰 불가능한 루프를 최적화하여 제거할 수 있도록 합니다. 유일한 예외는 expression 이 상수 표현식인 루프입니다; while ( true ) 는 항상 무한 루프입니다.

다른 모든 선택 및 반복문과 마찬가지로, while 문은 블록 범위 를 설정합니다: 표현식 에서 도입된 모든 식별자는 문장 이후에 범위를 벗어납니다.

(C99부터)

참고 사항

부울 및 포인터 표현식은 종종 루프 제어 표현식으로 사용됩니다. 부울 값 false 와 모든 포인터 타입의 null 포인터 값은 0과 동일하게 비교됩니다.

키워드

while

예제

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum { SIZE = 8 };
int main(void)
{
    // 단순한 예제
    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");
    // 고전적인 strcpy() 구현
    // (널 종료 문자열을 src에서 dst로 복사)
    char src[] = "Hello, world", dst[sizeof src], *p = dst, *q = src;
    while((*p++ = *q++)) // 이중 괄호 (엄밀히 필요하지 않음)
                         // 경고를 억제하기 위해 사용되며, 이 코드가 의도적으로
                         // (비교가 아닌) 할당임을 보장하고, 그 결과를
                         // 진리값으로 사용함
        ; // 널 문장
    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 문 (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 문 (p: 136)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 3.6.5.1 while 문

참고 항목

C++ 문서 for while 루프