do-while loop
조건 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 ) ; 는 항상 무한 루프입니다.
|
다른 모든 선택 및 반복문과 마찬가지로,
|
(C99부터) |
참고 사항
부울 및 포인터 표현식은 종종 루프 제어 표현식으로 사용됩니다. 부울 값 false 와 모든 포인터 타입의 null 포인터 값은 0과 동일하게 비교됩니다.
키워드
예제
#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
|