7. 변수

  1. 지역 변수
  2. 전역 변수
  3. 정적 변수
  4. 외부 변수



1. 지역(local) 변수

  • 지역 변수는 함수의 내부에서 정의되고, 변수가 선언된 함수에서만 사용이 가능하다.
  • 함수와 같이 스택 메모리 영역에 저장되므로 함수가 호출될 때 할당되고 종료되면 메모리 영역에서 해제된다.
  • 대괄호{}로 구분된 다른 영역에 있을 경우 다른 변수로 취급된다.
#include <iostream>

int main()
{
	int ilocal = 0;
	{
		int ilocal = 100;    //앞의 변수 i와 메모리를 공유하지 않는다. (다른 변수이다.)
		ilocal += 1;
	}
	return 0;
}



2. 전역(global) 변수

  • 프로그램의 시작부터 할당되며, 프로그램이 종료될 때까지 존재한다.
  • 데이터 메모리 영역에 저장된다.
  • 함수의 호출과 종료와는 상관 없이 항상 존재하지만, 어떤 함수에서든지 접근이 가능하다.
#include <iostream>

int iglobal = 0;

void test()
{
	iglobal = 20;
}

int main()
{
	iglobal = 50;   //50이 할당됨
	test();         //test 함수에 의해 20이 할당됨

	return 0;
}



3. 정적(static) 변수

  • 데이터 메모리 영역에 저장된다.
  • 처음 호출될 때 한번만 초기화된다. 이후의 호출에서는 선언 및 초기화 구문은 무시된다.
  • 정적 변수는 선언된 위치에 따라 해당 위치에서만 호출이 가능한 “전용” 변수가 된다.
#include <iostream>

static int gStatic = 0;

void test()
{
	gStatic = 20;
	static int lStatic = 0; //0으로 초기화 (1회만 실행됨)
	lStatic += 1;
}

int main()
{
	test(); //0으로 초기화된 후 1이 증가하여 lStatic에는 1이 할당되어있다.
	test(); //초기화되지 않고 1이 증가하여 lStatic에는 2가 할당되어있다.

	return 0;
}



4. 외부(extern) 변수

  • 외부 파일의 변수를 참조하기 위한 변수.
  • 다른 파일의 전역 변수만을 참조 가능하며, 전방 선언 형태로 헤더 파일에 포함시킬 수 있다.
  • 지역 변수는 휘발성이기에 참조가 불가능, 정적 변수는 해당 위치에서만 호출 가능하기에 참조 불가능.
extern int ext; //이 형태로 헤더 파일에 포함시켜 참조할 수 있다. (일반적인 전방 선언도 가능)