
1. 전역변수
int num; //전역변수
int main(void)
{
...
}
- 프로그램의 시작과 동시에 메모리 공간에 할당되어 종료 시까지 존재한다.
- 딱 1회 초기화 되기 때문에 별도의 값으로 초기화하지 않으면 0으로 초기화된다.
- 프로그램 전체 영역 어디서든 접근이 가능하다.
int num;
int main(void)
{
int num;
}
전역변수와 동일한 이름의 지역변수가 선언되면 지역변수가 우선이다.
2. static 변수
void SimpleFunc(void)
{
static int num=0;
printf("%d", num);
num++;
}
int main(void)
{
SimpleFunc(); // 0 출력
SimpleFunc(); // 1 출력
SimpleFunc(); // 2 출력
return 0;
}
- 선언된 함수 내에서만 접근이 가능하다. (지역변수 특성)
- 딱 1회 초기화되고 프로그램 종료 시까지 메모리 공간에 존재한다. (전역변수 특성)
3. register 변수
지역변수에는 다음과 같이 register라는 선언을 추가할 수 있다.
int main(void)
{
register int num;
...
}
위와 같이 선언이 되면 변수 num은 CPU에 존재하는 '레지스터'라는 메모리 공간에 저장될 확률이 높아진다.
말 그대로 확률이 높아지는 것이지 최종 결정은 컴파일러가 내린다.
우리가 아무리 register 선언을 추가해도 컴파일러가 합당하지 않다고 판단하면 레지스터에 할당하지 않는다.