break 문(break statement)
break 문(break statement)
반복문이나 switch 블록 한가운데서 흐름을 끊고 빠져나가고 싶을 때 쓰는 것이 break예요. break는 둘러싸는 for, while, do-while 루프나 switch 문을 종료시켜요. 조건 표현식과 조건문만으로 루프를 끝내기 어색할 때 특히 유용하죠.
출처: cppreference
본문
문법
attr-spec-seq(optional) break ; |
| 자리 | 의미 |
|---|---|
attr-spec-seq |
(C23부터) break 문에 적용되는 속성(attribute)들의 리스트 |
break 문은 루프 본문(while, do-while, for)의 문이거나 switch의 문 안에서만 나타날 수 있어요.
동작 방식(Explanation)
이 문이 실행되면 제어는 둘러싸는 루프나 switch 바로 다음에 오는 문 또는 선언으로 넘어가요. 마치 goto로 이동하는 것과 같죠.
키워드(Keywords)
break
주의할 점(Notes)
break 문 하나로 여러 겹으로 중첩된 루프를 한 번에 빠져나갈 수는 없어요. 그럴 때는 goto 문을 쓰면 돼요.
예제
여기서는 switch 안의 break가 어디까지 영향을 미치는지, 그리고 중첩 루프에서는 안쪽 루프만 종료된다는 점을 확인해 볼게요.
#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까지 "2345"가 이어져 나와요. 중첩 루프 쪽은 두 번째 for가 break를 만나면 안쪽 for만 종료되고 바깥 for는 그대로 이어져서 00 01 10 11이 출력돼요.
더 알아보기
[[fallthrough]](C23): 이전 case 레이블에서의 낙하(fall through)가 의도적임을 알려서, fall-through에 경고하는 컴파일러가 진단하지 않도록 하는 속성 지정자.continue문: 반복문의 다음 반복으로 제어를 넘기는 점프 문.