`break` 문 — 반복과 switch를 빠져나갈 때
break 문 — 반복과 switch를 빠져나갈 때
루프 안에서 조건이 맞으면 멈추고 나가고 싶을 때, switch에서 특정 case를 처리한 뒤 뒤따르는 case들을 건너뛰고 싶을 때 — 그게 바로 break가 하는 일이에요. break는 단 하나의 루프나 switch만 빠져나간다는 제약이 있어서, 중첩된 반복을 한 번에 빠져나가야 할 때는 goto가 필요하다는 점도 기억해 둘게요.
출처: cppreference
본문
문법(Syntax)
attr-spec-seq(optional) break ;
attr-spec-seq는 (C23에서) break 문에 적용되는 선택적인 속성 목록이에요.
break는 루프 본문의 문( while, do-while, for) 안이나 switch의 문 안에서만 나타날 수 있어요.
설명(Explanation)
이 문이 실행된 뒤에는 제어가 바깥 루프나 switch 바로 다음에 오는 문 또는 선언으로, 마치 goto처럼 이동해요.
키워드(Keywords)
break
참고(Notes)
break 문은 여러 겹으로 중첩된 루프를 한 번에 빠져나가는 데 쓸 수 없어요. 그 용도에는 goto 문을 쓰면 돼요.
예제(Example)
#include <stdio.h>
int main(void)
{
int i = 2;
switch (i)
{
case 1: printf("1");
case 2: printf("2"); // i==2, so execution starts at this case label
case 3: printf("3");
case 4:
case 5: printf("45");
break; // execution of subsequent cases is terminated
case 6: printf("6");
}
printf("\n");
// Compare outputs from these two nested for loops.
for (int j = 0; j < 2; j++)
for (int k = 0; k < 5; k++)
printf("%d%d ", j,k);
printf("\n");
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 5; k++) // only this loop is exited by break
{
if (k == 2)
break;
printf("%d%d ", j,k);
}
}
}
가능한 출력:
2345
00 01 02 03 04 10 11 12 13 14
00 01 10 11
첫 예제에서 i는 2라서 case 2부터 실행돼요. case 5의 break 덕분에 case 6은 실행되지 않아요. 두 번째는 break 없는 중첩 루프가 전부 출력하고, 세 번째는 안쪽 루프에서 k == 2일 때 break로 빠져나가 k가 0, 1일 때만 출력해요.
더 알아보기
switch에 대한 switch 문서와 함께 보면break의 역할이 더 또렷해져요.- 중첩 루프를 한 번에 빠져나가는
goto문에 대해서도 루프 문서를 참고해요.