C 언어 while 반복문의 기본 원리
C 언어에서 while 키워드는 인자로 전달된 조건식을 검사하여 반복 실행 여부를 결정하는 반복문을 정의하는 데 사용됩니다. 조건식은 참(true) 또는 거짓(false) 중 하나로 평가되며, 조건이 참이면 블록 안의 코드가 계속해서 반복 실행되고, 조건이 거짓이면 블록 안의 코드는 단 한 번도 실행되지 않습니다.
이러한 특성 때문에 while 루프에 어떤 값을 인자로 전달하느냐에 따라 while(1)과 while(0)의 동작이 완전히 달라집니다.
while(1) — 조건이 항상 참인 무한 루프
while(1)은 조건이 항상 참으로 평가되는 반복문입니다. 따라서 블록 내부의 코드가 끝없이 반복 실행되며, 일반적으로 break 문이나 외부 이벤트를 통해 루프를 빠져나오도록 작성합니다.
여기서 주목할 점은 조건을 참으로 만드는 값이 꼭 1일 필요는 없다는 사실입니다. C 언어에서는 0이 아닌 모든 정수(음수 포함)를 조건식에 전달하면 참으로 간주합니다. 즉, while(-3)이나 while(100) 역시 while(1)과 동일하게 무한 루프로 동작합니다.
while(0) — 단 한 번도 실행되지 않는 루프
반면 while(0)은 조건이 항상 거짓으로 평가되는 반복문입니다. 블록 내부의 코드는 시작조차 되지 않고 그대로 건너뛰어집니다.
C 언어에서 조건을 거짓으로 만드는 값은 오직 0뿐입니다. 따라서 0이 아닌 다른 정수, 심지어 음수라도 전달되면 조건은 참으로 처리되어 코드가 실행됩니다.
핵심 차이점 요약
| 구분 | while(1) | while(0) |
|---|---|---|
| 조건 평가 결과 | 항상 참(true) | 항상 거짓(false) |
| 본문 실행 여부 | 무한히 반복 실행됨 | 단 한 번도 실행되지 않음 |
| 참/거짓 판정 기준 | 0이 아닌 모든 값은 참 | 오직 0만 거짓 |
| 대표 활용 사례 | 서버·임베디드 프로그램의 무한 루프 | 디버깅 중 코드 블록 임시 비활성화 |
예제 1: while(1) 무한 루프
#include <stdio.h>
int main() {
int i = 1;
printf("Loop get started\n");
while(1){
printf("The value of i: %d\n", i);
if(i == 10){ // i가 10이 되면 루프 탈출
break;
}
i++;
}
printf("Loop get ended\n");
return 0;
}실행 결과
Loop get started The value of i: 1 The value of i: 2 The value of i: 3 The value of i: 4 The value of i: 5 The value of i: 6 The value of i: 7 The value of i: 8 The value of i: 9 The value of i: 10 Loop get ended
위 예제에서 while(1)은 조건이 늘 참이기 때문에 스스로 멈추지 못하고, i가 10이 되었을 때 break 문을 만나야만 루프를 벗어납니다. 만약 break 문이 없다면 프로그램은 영원히 반복되는 무한 루프에 빠지게 됩니다.
예제 2: while(0) 미실행 루프
#include <stdio.h>
int main() {
int i = 1;
printf("Loop get started\n");
while(0){
printf("The value of i: %d\n", i);
if(i == 10){
break;
}
i++;
}
printf("Loop get ended\n");
return 0;
}실행 결과
Loop get started Loop get ended
while(0)의 경우 조건이 처음부터 거짓이므로 블록 내부의 출력문은 단 한 번도 실행되지 않고, 프로그램은 곧바로 루프 다음 문장으로 넘어갑니다.
마무리
정리하면, while(1)은 조건이 항상 참이어서 본문이 무한히 반복 실행되는 무한 루프이며, 서버나 임베디드 시스템처럼 프로그램이 상시 대기해야 하는 환경에서 자주 활용됩니다. 반면 while(0)은 조건이 항상 거짓이어서 본문이 결코 실행되지 않으며, 실무에서는 주로 디버깅 과정에서 특정 코드 블록을 임시로 비활성화할 때 사용됩니다. 두 구문의 동작 차이를 정확히 이해해 두면 C 언어의 조건 평가 방식(0은 거짓, 0이 아닌 값은 참)을 자연스럽게 익힐 수 있습니다.