static 변수
- static 변수를 정적 변수라고 부릅니다.
- 전역변수와 지역변수 모두에 static 선언을 추가할 수 있다.
하지만 static 변수는 『접근이 제한된 전역변수』를 만드는 것으로
지역변수 적용하는 것이 일반적.
지역변수에 static을 붙인 경우
- 선언된 함수 내에서만 접근이 가능한 것은 계속해서 유효
- But, 해당 함수가 반환되면 소멸되지 않고, 처음 한번 초기화되고
프로그램 종료 시까지 메모리 공간에 존재
즉, 한번만 초기화 되는 것 (전역변수의 성격을 조금 띄게 됨)
#include <stdio.h>
int simpleFunc() {
static int x = 0; // 초기화하지 않으면 0으로 초기화
int y = 0; // 초기화하지 않으면 쓰레기 값 초기화
x++; y++;
printf("static: %d, local: %d \n", x, y);
}
void main() {
int i;
for (i = 0; i < 3; i++)
simpleFunc();
return;
}
Q. static으로 선언된 지역변수 x는 simpleFunc 함수가 호출되어야 선언될까?
A. 아니다!
static 사용의 목적은 전역변수의 선언시 초기화하지 않아도 기본값으로 초기화
프로그램 시작하면 메모리에 할당 및 초기화하는 성질을 띄기에 함수가 호출되기전에 선언됩니다.
함수 내에서만 접근이 가능도록 제한하는 용도로 사용됩니다.
다음과 같이 유효하지 않은 범위에서 접근하면 Error 발생
[해석]
static 변수는 전역변수의 단점 중 하나인 누구나 함부로 접근할 수 있는 단점 해결
기존의 전역변수를 static 지역변수로 대체한다면 프로그램의 안전성을 높일 수 있다.
"난 사실 전역변수랑 성격이 같아. 초기화하지 않으면 전역변수처럼 0(기본값)으로 초기화되고,
프로그램 시작과 동시에 할당 및 초기화되어서 프로그램이 종료될 때까지 메모리 공간에 남아있지!
그럼 왜 이 위치에 선언되었냐고? 그건 접근의 범위를 simpleFunc로 제한하기 위해서야"
→ Code 상에서는 SimpleFunc 내부에서 선언되었지만
메모리상으로는 전역변수와 같이 Data영역에 저장된다.
※ C 언어 메모리 구조 [Code] | [Data] | [Heap] | [Stack]
[C] 지역변수와 전역변수
변수는 선언되는 위치에 따라서 크게 『전역변수』 와 『지역변수』 로 나뉜다. 두 변수의 차이점은 메모리상에 존재하는 기간, 변수에 접근할 수 있는 범위 지역 변수 중괄호{} 내에 선언되는
zoosso.tistory.com
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C/C++] #include "헤더파일" & #include <헤더파일> (1) | 2024.12.25 |
---|---|
[C/C++] 지역변수와 전역변수와 레지스터 변수 (1) | 2024.12.22 |
[C/C++] [전처리기] #if (0) | 2024.07.23 |
[C/C++] 열거형 타입 enum 이란? (3) | 2024.06.06 |
[C/C++] #ifdef, #if defined() 비교 및 활용 (0) | 2022.09.01 |
댓글