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"가 이어져 나와요. 중첩 루프 쪽은 두 번째 forbreak를 만나면 안쪽 for만 종료되고 바깥 for는 그대로 이어져서 00 01 10 11이 출력돼요.

더 알아보기

  • [[fallthrough]](C23): 이전 case 레이블에서의 낙하(fall through)가 의도적임을 알려서, fall-through에 경고하는 컴파일러가 진단하지 않도록 하는 속성 지정자.
  • continue 문: 반복문의 다음 반복으로 제어를 넘기는 점프 문.