Namespaces
Variants

do-while loop

From cppreference.net

조건 expression 의 값이 false가 될 때까지 statement 를 반복적으로 실행합니다. 테스트는 각 반복 후에 이루어집니다.

목차

구문

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

설명

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

표현식 의 평가는 명령문 의 각 실행 후에 발생합니다(정상적으로 진입했거나 goto 에 의해 진입했는지 여부와 관계없이). 제어 표현식이 루프 본문 전에 평가되어야 하는 경우, while 루프 또는 for 루프 를 사용할 수 있습니다.

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

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

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

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

(C99부터)

참고 사항

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

키워드

do , while

예제

#include <stdio.h>
#include <stdlib.h>
enum { SIZE = 8 };
int main(void)
{
    // 단순한 예제
    int array[SIZE], n = 0;
    do array[n++] = rand() % 2; // 루프 본문은 단일 표현식 문입니다
    while(n < SIZE);
    puts("Array filled!");
    n = 0;
    do
    { // 루프 본문은 복합 문입니다
        printf("%d ", array[n]);
        ++n;
    } while (n < SIZE);
    printf("\n");
    // K&R itoa()의 루프. do-while 루프는
    // 항상 최소한 하나의 숫자가 생성되기 때문에 사용됩니다
    int num = 1234, i=0;
    char s[10];
    do s[i++] = num % 10 + '0'; // 역순으로 다음 숫자 가져오기
    while ((num /= 10) > 0);
    s[i] = '\0';
    puts(s);
}

가능한 출력:

Array filled!
1 0 1 1 1 1 0 0
4321

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 6.8.6.3 do 문 (p: 156)
  • C17 표준 (ISO/IEC 9899:2018):
  • 6.8.5.2 do 문 (p: 109)
  • C11 표준 (ISO/IEC 9899:2011):
  • 6.8.5.2 do 문 (p: 151)
  • C99 표준 (ISO/IEC 9899:1999):
  • 6.8.5.2 do 문 (p: 136)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 3.6.5.2 do 문

참고 항목

C++ 문서 for do - while loop