본문 바로가기
Programming/C, C++

C++ 지역변수, 전역변수, 정적변수

by Dev_카페인 2022. 12. 7.
반응형

[C/C++] 지역변수, 전역변수, 정적변수

 

지역변수 :

  • 한 지역 안에서만 사용할 수 있는 변수
  • 매개변수도 지역변수다
  • 함수의 내부나, 중괄호 내부에서 동작한다.
  • 그 지역을 벗어나면 메모리 공간에서 소멸된다.
  • 초기화 하지 않으면 컴파일 에러가 나거나 쓰레기값이 저장된다.

전역변수 :

  • 어느 지역에서나 사용할 수 있는 변수
  • 전처리기 밑에 선언한다.
  • 반드시 상수로 초기화해야 한다.
  • 초기값을 지정하지 않으면 디폴트 값 0으로 자동 초기화 된다.
  • 프로그램이 종료되면 메모리가 소멸된다.

정적변수 :

  • 전역변수와 대부분 비슷한 특성을 가지고 있다.
  • 초기화가 딱 한 번만 진행된다.
  • 프로그램이 시작될 때 생성 및 초기화 된다.
  • 프로그램이 종료되면 소멸된다.
  • 함수의 매개변수로 사용할 수 없다.
  • 정적 지역변수와 정적 전역변수로 나뉜다.
  • 데이터 타입 앞에 static을 붙여 선언한다.

// 지역변수, 전역변수, 정적변수

#include <stdio.h>

int global = 10;	// 전역 변수
static int staticGlobal = 0;		// 정적 전역 변수

void TestFunction(int functionLocal)
{
	// functionLocal은 지역 변수
	static int staticLocal = 0;		// 정적 지역 변수 
	printf("functionLocal : %d\n", functionLocal++);	// 매개변수는 지역변수이다.
	printf("GlobalA : %d\n", global++);		// 전역변수 사용 가능
	printf("staticLocal : %d\n", staticLocal++);	// 정적 지역 변수는 값이 유지됨
	printf("staticGlobal : %d\n", staticGlobal++);	// 정적 전역 변수는 어디서든 사용 가능하다.
	printf("-------------------------------\n");	
}

int main()
{
	{
		// 지역 변수 (중괄호 밖에서 사용 불가)
		// 이 지역이 끝나면 소멸 됨
		int mainLocal = 5;		
		printf("mainLocal : %d\n", mainLocal);	// 정적 전역 변수는 어디서든 사용 가능하다.
		TestFunction(mainLocal);

	}
	TestFunction(0);
	TestFunction(0);
	TestFunction(0);
	TestFunction(0);
	TestFunction(0);

	// 지역변수가 선언된 중괄호 외에 밖에서 사용 불가능.
	//printf("mainLocal : %d", mainLocal);	
	return 0;
}

반응형