C언어 - switch 문과 지역변수 (중괄호의 필요성)

컴퓨터/C

728x90
반응형

서론

C언어 문법에서 switch문을 사용하여 코딩을 하는 경우 지역변수를 선언하여 사용하고 싶은데 원하지 않는 동작을 하는 경우가 종종 생기고는 합니다.

본문에서는 원인을 파악하고 효율적으로 코딩을 하는 방법을 알아보도록 합시다.

 

우선 비교해 봅시다.

switch문을 사용해서 특정 case에서만 지역변수를 생성하고 사용하고 싶다고 가정해 보도록 합시다. 

하나의 예제 코드를 보도록 합시다.

#include<stdio.h>

int main()
{
	//지역변수를 사용하지 못하는 코드
	int	number = 1;
	switch (number)
	{
	case 1:
		break;
	case 2:
		int a = 1;   //Error 발생!!
		break;
	default:
		break;
	}

	//지역변수를 사용할 수 있는 코드
	int  number2 = 1;
	switch (number2)
	{
	case 1:
	{
		break;
	}
	case 2:
	{	
		int a = 1;
		break;
	}
	default:
		break;
	}

	return 0;
}

위의 소스코드에서 아래의 스위치 문에서는 case 2에 지역변수를 사용 가능합니다. 

하지만 위의 소스코드에서는 error가 발생합니다. 

왜 그런지 차이점이 확인이 되시나요?

바로 중괄호 { }의 역할 때문입니다. 

 

변수의 생명 주기를 지정하는 중괄호 { } 

기존에 C언에서 지역변수들은 중괄호 { }로 생명주기를 지정할 수 있다고 했습니다.

일반적으로 Swich문을 작성한다면 중괄호를 사용하지 않아도, 정상적으로 swich문이 동작하게 됩니다. 

따라서 특정 case안에서만 지역변수를 활용하고 싶다면 중괄호를 사용하여 범위를 지정해 주어야 합니다.

예제를 읽어보면 조금 더 이해에 도움이 될 것입니다.

	int  number2 = 1;
	switch (number2)
	{
		int numberInswich = 100; // swich문안에서만 존재하는 지역변수
	case 1:
	{
		break;
	}
	case 2:
	{	
		int a = 1; // case2 안에서만 존재하는 지역변수
		break;
	}
	default:
		break;
	}
728x90
반응형

'컴퓨터 > C' 카테고리의 다른 글

C 언어 - 비트연산  (0) 2022.02.20
C 언어 - CallBack함수(콜백함수)  (1) 2022.01.28
C 언어 - 함수 포인터  (0) 2022.01.28
Visual Studio - Debug 와 Release (프로그램 배포)  (0) 2022.01.05
C 언어 - scan 무한 반복 에러  (0) 2021.12.01

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :