본문 바로가기
프로그래밍 ( Programming )/C++

static 변수

by Jayce_choi 2021. 4. 30.
반응형

static - 정적 

#include<stdio.h>
void increse()
{
	int num1 = 0;
	printf("%d \n", num1);
	num1++;
}
int main()
{
	increse();
	increse();
	increse();
	increse(); 
	return 0;
}

해당 예제의 결과는 항상 0의 값을 출력합니다. 이유는 num1이 지역변수로 선언되기 때문에 해당 함수가 끝나면 없어지기 때문이며 다시 함수가 호출되었을 때 새로운 num1이 생기기 때문입니다. 다음 예제를 한번 보겠습니다. 

 

#include<stdio.h>
void increase()
{
	static int num1; // static으로 선언을 하였을때 변수가 프로그램이 종료될때 까지 유지가 된다. 
	printf("%d\n", num1);
	num1++;
}
int main()
{
	increase();
	increase();
	increase();
	return 0;
}

해당 예제를 실행하면 increase 함수를 사용한 만큼 num1의 변수가 가진 값이 증가하여 출력됩니다. 

num1은 static으로 선언이 되었기 때문에 프로그램이 끝날 때까지 사라지지 않기 때문입니다. 

* 특징 : static을 이용하여 변수를 선언하였을때 구체적인 값으로 초기화하지 않더라도 0 값으로 자동적으로 초기화가 됩니다. 특히 정적 변수를 전역 변수로 선언을 하든 지역변수로 선언하든 상관없이 초기값을 정하지 않으면 0으로 자동적으로 초기화가 됩니다. 그리고 정적 변수는 프로그램이 시작될 때 생성 및 초기화되고 프로그램이 끝날 때 사라지게 됩니다. 

* 정적 변수와 전역 변수의 차이 : 전역 변수 같은 경우 다른 파일에서도 해당 변수에 접근이 가능하며 사용을 하기 위해서는 extern을 이용하여 선언을 하면 되겠습니다.  정적 변수는 다른 파일에서 접근이 불가능합니다. 때문에 오직 해당 파일에서만 scope에 맞게 접근이 가능합니다. 

 

정리하면 C언어에서 기본적으로 선언하는 변수는 동적 변수로서 변수 선언과 동시에 메모리에 할당되며 변수 사용이 모두 끝남과 동시에 메모리가 해제됩니다. 하지만 정적 변수 같은 경우 컴파일이 될 때 메모리에 할당되며 프로그램이 끝날 때만 메모리가 해제됩니다. 때문에 정적 변수는 전역 변수처럼 변수의 범위를 벗어나는 경우에도 값을 유지하는 속성을 가지고 있습니다. 

반응형

댓글