break 문(break statement)
break 문(break statement)
반복문이나 switch 블록 한가운데서 흐름을 끊고 빠져나가고 싶을 때 쓰는 것이 break예요. break는 특정 둘러싸는 문(statement)을 종료해요.
출처: cppreference
본문
문법
속성(optional) break ; |
| 자리 | 의미 |
|---|---|
| 속성(attr) | (C++11부터) 임의 개수의 속성 |
동작 방식(Explanation)
break 문은 반드시 다음 문들 중 하나에 둘러싸여 있어야 해요.
- 반복 문(iteration statements):
for, 범위 기반for(range-for),while,do-while- 확장 문(expansion statements,
template for): (C++26부터)
- 확장 문(expansion statements,
switch문
break 문을 실행하면 그중 가장 안쪽의 둘러싸는 문이 종료되고, 그 다음 제어는 종료된 문 뒤에 오는 문(있을 경우)으로 넘어가요.
주의할 점(Notes)
블록을 빠져나갈 때와 마찬가지로, 둘러싸는 복합 문이나 루프/switch의 조건에서 선언된 모든 자동 저장 객체는, 구성된 순서의 역순으로 파괴된 뒤에 둘러싸는 루프 다음의 첫 줄이 실행돼요.
break 문 하나로 여러 겹의 중첩 루프를 한 번에 빠져나갈 수는 없어요. 그럴 때는 goto 문을 쓸 수 있어요.
예제
여기서는 switch 안의 break와 중첩 루프에서의 break가 실제로 어디까지 영향을 미치는지 확인해 볼게요.
#include <iostream>
int main()
{
int i = 2;
switch (i)
{
case 1: std::cout << "1"; // <---- 경고 가능: fall through
case 2: std::cout << "2"; // 이 case 레이블부터 실행 시작 (+경고)
case 3: std::cout << "3"; // <---- 경고 가능: fall through
case 4: // <---- 경고 가능: fall through
case 5: std::cout << "45"; //
break; // 이후 문의 실행이 종료됨
case 6: std::cout << "6";
}
std::cout << '\n';
for (char c = 'a'; c < 'c'; c++)
{
for (int i = 0; i < 5; i++) // break의 영향을 받는 건 이 루프뿐
{ //
if (i == 2) //
break; //
std::cout << c << i << ' '; //
}
}
std::cout << '\n';
}
가능한 출력:
2345
a0 a1 b0 b1
첫 출력을 보면, switch에서 case 2:부터 시작해서 case 5:의 break까지 "2345"가 한 줄로 이어져 나와요. 중첩 루프 쪽은 안쪽 for만 break로 종료되고 바깥 for는 그대로 돌아서 a0 a1 b0 b1이 출력돼요.
더 알아보기
[[fallthrough]](C++17): 이전 case 레이블에서의 낙하(fall through)가 의도적임을 알려서, fall-through에 경고하는 컴파일러가 진단하지 않도록 하는 속성 지정자(attribute specifier).