본문 바로가기
프로그래밍언어/C 언어

[혼자 공부하는 C언어] 정적 지역 변수

by khsnote22 2022. 12. 10.

http://www.yes24.com/Product/Goods/74269921?pid=123487&cosemkid=go15604913615239458&gclid=Cj0KCQiA1sucBhDgARIsAFoytUu_RVCPiWpDB4Qzsz8FALHdBuNhmAgRpaofWWo4P1mgrSQLSiudKFkaAuxSEALw_wcB 

 

혼자 공부하는 C 언어 - YES24

혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학

www.yes24.com


지역 변수를 선언할 때 static 예약어를 사용하면 정적 지역 변수가 됩니다. 정적 지역 변수는 코드 블록 안에 선언하므로 일반 지역 변수와 같이 사용 범위가 블록 내부로 제한됩니다. 반면에 저장 공간이 메모리에 존재하는 기간이 다릅니다.

 

정적 지역 변수는 선언된 함수가 반환되더라도 그 저장 공간을 계속 유지합니다. 따라서 하나의 함수가 여러 번 호출되는 경우 같은 변수를 공유하는 것이 가능합니다. 

#include <stdio.h>

void auto_func(void); // auto_func 함수 선언
void static_func(void); // static_func 함수 선언

int main(void)
{
	int i;

	printf("일반 지역 변수를 사용한 함수..,\n");
	for (i=0; i<3; i++)
	{
		auto_func;
	}

	printf("정적 지역 변수를 사용한 함수...\n");
	for (i = 0; i < 3; i++)
	{
		static_func();
	}

	return 0;
}

void auto_func(void)
{
	auto int a = 0; // 지역 변수 선언과 초기화

	a++; // a 값 1 증가
	print("%d\n", a); // a 출력
}

void static_func(void)
{
	static int a; // 정적 지역 변수 선언
	a++; // a 값 1 증가
	printf("%d\n", a); // a 출력 
}