`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 5break 덕분에 case 6은 실행되지 않아요. 두 번째는 break 없는 중첩 루프가 전부 출력하고, 세 번째는 안쪽 루프에서 k == 2일 때 break로 빠져나가 k가 0, 1일 때만 출력해요.

더 알아보기

  • switch에 대한 switch 문서와 함께 보면 break의 역할이 더 또렷해져요.
  • 중첩 루프를 한 번에 빠져나가는 goto 문에 대해서도 루프 문서를 참고해요.