이글은 "전문가를 위한 c++(개정4판)"을 학습한 내용을 직접 실습해보며 정리한 Review용 글입니다.
조건문(switch ~ case)
switch 문은 조건으로 지정한 표현식의 결과에 따라 동작을 선택합니다. switch 문에 지정할 수 있는 표현식은 결과값이 반드시 정수 타입이거나, 정수타입으로 변환할 수 있는 타입, enum 타입, enum class 타입이어야 하며 상수와 비교할 수 있어야 합니다. switch 문에 지정한 표현식의 결과와 일치하는 case가 있으면 그 아래에 나오는 코드를 실행하다가 break문이 나오면 멈춥니다. case문에서 일치하는 것이 하나도 발견되지 않았을 때 default 키워드를 통해 실행하게 할 수 있습니다. switch 문의 대표적인 활용 예는 다음과 같습니다.
switch (menuItem) {
case OpenMenuItem:
// 파일을 여는 코드
break;
case SaveMenuItem:
// 파일을 저장하는 코드
break;
default:
// 에러메세지를 출력하는 코드
break;
}
switch문의 조건으로 지정한 값과 일치하는 case문이 있다면 그 아래 나오는 break문이 나올 때 까지 실행합니다.. 이 때 만약 break문이 없다면 다음에 나오는 case문도 계속해서 실행하는데 이것을 폴스루(fallthrough)라고 부릅니다. 다음은 폴스루 방식으로 작성한 예를 보여줍니다.
switch (backgroundColor) {
case Color::DarkBlue:
case Color::Black:
// 배경색이 진청 혹은 검정일 때 실행되는 코드
break;
case Color::Red:
// 배경색이 빨강일때 실행되는 코드
break;
}
폴스루 방식으로 작성했는데 해당 case가 비어있지 않으면 컴파일러는 경고 메세지를 발생시킵니다.
#include <iostream>
enum Color
{
DarkBlue,
Black,
Red
};
int main()
{
int backgroundColor = 1;
int count = 0;
switch (backgroundColor) {
case Color::DarkBlue:
count++;
case Color::Black: //fallthrough 경고가 뜸
// 배경색이 진청 혹은 검정일 때 실행되는 코드
break;
case Color::Red:
// 배경색이 빨강일때 실행되는 코드
break;
}
return 0;
}
경고 메세지는 case Color::Black 줄에서 다음과 같이 뜹니다.
c++17 부터는 명시적으로 폴스루 방식을 지정할 수 있습니다.__fallthrough 또는 [[fallthrough]]와 같이 속성을 지정해서 break문 대신 써주면 됩니다.
#include <iostream>
enum Color
{
DarkBlue,
Black,
Red
};
int main()
{
int backgroundColor = 1;
int count = 0;
switch (backgroundColor) {
case Color::DarkBlue:
count++;
__fallthrough; // [[fallthrough]]와 동일
case Color::Black:
// 배경색이 진청 혹은 검정일 때 실행되는 코드
break;
case Color::Red:
[[fallthrough]]; // __fallthrough와 동일
default:
break;
}
return 0;
}
c++17부터 switch문도 if문 처럼 이니셜라이저를 지정할 수 있습니다.
switch (<이니셜라이저>; <표현식>) {<본문>}
if문과 마찬가지로 <이니셜라이저>에서 선언한 변수는 <표현식>과 <본문>안에서만 사용할 수 있고 switch문 밖에서는 사용할 수 없습니다.
'Program Language > c++' 카테고리의 다른 글
c++ 기초(논리 연산자) (0) | 2023.01.04 |
---|---|
C++ 기초(조건 연산자) (0) | 2023.01.04 |
c++ 기초(조건문(if ~ else if ~ else)) (0) | 2023.01.03 |
C++ 기초(구조체) (0) | 2023.01.03 |
c++ 기초(enum) (0) | 2023.01.02 |
댓글