static
static 의미를 이해할 때, C언어를 만든 사람입장(컴퓨터 구조, 어셈블러)에서 보면 이해하는게 조금 쉽다. static 변수는 os로부터 받은 "메모리"가 정적으로 선언된다는 것이 static이라는 것이다. 동적할당에 대비하여 생각하면 더 와닿을 것이다.
함수 내의 static 변수 선언
static으로 함수 내의 변수가 선언되면 해당 함수 영역에서 변수가 선언될 때 같은 메모리를 쓰고, 초기화를 한 번 밖에 안한다.
void doSomething()
{
static int a = 1;
++a;
cout << a << endl;
}
int main()
{
doSomething();
doSomething();
doSomething();
doSomething();
return 0;
}
doSomething()함수를 몇 번 호출하고 VS의 디버거를 통해 함수 내의 선언된 변수 a를 살펴보면, 함수 스코프에서 나와도 조사식에 값이 남아있는 것을 볼 수 있다. (F11이 아닌, F10을 통해 함수를 건너뛰어 진행하면 a변수는 조사식에 잡히지 않음을 주의해야 한다.) 또한 F11을 통해 실행되는 코드에서 `static int a = 1`은 건너 뛰고 실행되는 것을 확인할 수 있다. 즉 초기화는 처음 한 번 밖에 되지 않으며, 그 이후는 코드 실행이 되지 않는다.

또한 강의에서 초기화를 한 번 밖에 안하며, 대입을 반복하지 않는다고 설명한다. 이는 static 변수를 처음 선언할 때 초기화가 반드시 필요하다는 의미로 해석할 수도 있다고 했는데, 초기화를 하지 않아도 자동으로 초기화 되고 사용되는 것을 확인했다. 하지만 기본 개념적으로는 초기화 되어있어야 한다는 맥락에 동의를 하며, 아마 컴파일러 버전이 변경되면 강의에서 나온 말대로 에러가 날 수 있겠다고 생각한다.
사용 예시로는 디버깅할 때 함수가 몇 번 호출되는지 세어볼 때 사용 하는 것도 유용하다고 한다.
'C,C++ > 홍정모의 따배C++' 카테고리의 다른 글
| [C++] 전역 변수, 내부 연결, 외부 연결, 헤더 include 주의점 (0) | 2025.12.20 |
|---|---|
| [C++] 변수 초기화 방식 (0) | 2025.09.25 |
| [C++] 전처리기, 매크로 (0) | 2025.09.21 |
| [C++] 네임스페이스 (0) | 2025.09.13 |
| [C++] 전방 선언과 헤더 파일에 대한 고찰 (0) | 2025.09.10 |