Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++에서 함수 수준 정적 변수는 언제 초기화될까?

정적 변수(static variable)static 키워드를 사용하여 정의할 수 있습니다. 정적 변수는 프로그램이 실행되는 동안 메모리에 계속 유지되는 변수로, 수명(lifetime)이 프로그램의 전체 실행 기간과 같습니다.

이는 자동 변수(automatic variable)와 대비되는 특징입니다. 자동 변수는 해당 함수가 실행 중일 때만 메모리에 존재하며, 함수가 종료되면 소멸합니다.

함수 수준 정적 변수의 초기화 시점

함수 내부에 선언된 정적 변수는 처음 사용되는 시점에 생성 및 초기화됩니다. 다만 변수를 위한 메모리 공간 자체는 프로그램이 로드(load)되는 시점에 미리 할당됩니다. 즉, 초기화 코드는 최초 호출 시 한 번만 실행되고, 이후 함수가 몇 번이고 호출되더라도 초기화 과정은 다시 수행되지 않습니다.

예제 코드

다음은 C 언어에서 함수 수준 정적 변수의 동작을 보여주는 프로그램입니다.

#include<stdio.h>
int func() {
    static int num = 0;
    num += 5;
    return num;
}
int main() {
    for(int i = 0; i<5; i++) {
        printf("%d\n", func());
    }
    return 0;
}

실행 결과

5
10
15
20
25

코드 분석

함수 func()에는 0으로 초기화된 정적 변수 num이 선언되어 있습니다. 이후 num에 5를 더한 값을 반환합니다. 해당 코드는 다음과 같습니다.

int func() {
    static int num = 0;
    num += 5;
    return num;
}

main() 함수에서는 for 루프를 통해 func()를 5번 호출하고, 반환된 num 값을 출력합니다.

여기서 핵심은 num이 정적 변수라는 점입니다. 프로그램이 실행되는 동안 메모리에 계속 유지되므로, 함수가 호출될 때마다 값이 사라지지 않고 이전 값 위에 누적됩니다. 그 결과 첫 호출에서는 5, 두 번째 호출에서는 10처럼 일관되게 증가하는 값이 출력됩니다. 만약 num이 일반 지역 변수였다면 매 호출마다 0으로 초기화되어 항상 5만 출력되었을 것입니다.

정리

  • 정적 변수의 수명은 프로그램 전체 실행 기간입니다.
  • 함수 수준 정적 변수는 최초 사용 시점에 단 한 번 초기화됩니다.
  • 메모리는 프로그램 로드 시점에 할당되지만, 초기화식은 첫 실행 흐름이 해당 선언을 지날 때 평가됩니다.