Namespaces
Variants

while loop

From ko.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 루프