본문 바로가기
Program Language/c++

C++ 기초(조건문(switch/case))

by 토담이아빠 2023. 1. 3.

조건문(switch~case)

 

이글은 "전문가를 위한 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

댓글