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

C 언어 지역 정적 변수(Local Static Variable)란 무엇인가?

C 언어에서 지역 정적 변수(local static variable)는 선언된 함수의 호출이 종료되더라도 수명(lifetime)이 끝나지 않는 변수입니다. 이 변수는 프로그램 전체가 종료될 때까지 메모리에 유지되며, 함수가 여러 번 호출되더라도 모든 호출이 동일한 변수 하나를 공유합니다.

이러한 특성 덕분에 지역 정적 변수는 주로 함수가 호출된 횟수를 세는 카운터로 활용됩니다. 또한 정적 변수는 초기화하지 않으면 기본값으로 0이 자동으로 설정됩니다.

반면, 일반적인 지역 변수는 자신이 선언된 블록(중괄호 {}) 내부에서만 유효하며, 블록 외부에서는 접근할 수 없습니다. 블록 밖에 선언된 전역 변수는 프로그램이 종료될 때까지 어디서든 접근 가능하다는 점이 서로 다릅니다.

예제 1: 지역 변수

다음은 지역 변수의 수명이 블록 내부로 제한됨을 보여주는 C 프로그램입니다.

#include<stdio.h>
main(){
    int a=40, b=30, sum; // 지역 변수의 수명은 블록 내부로 제한됨
    printf("sum=%d", a+b);
}

출력 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

sum=70

예제 2: 전역 변수

다음은 전역 변수가 프로그램 전체에서 접근 가능함을 보여주는 C 프로그램입니다.

int c = 30; /* 전역 영역 */
main(){
    int a = 10; // 지역 영역
    printf("a=%d, c=%d", a, c);
    fun();
}
fun(){
    printf("c=%d", c);
}

출력 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

a=10, c=30

예제 3: 지역 정적 변수

다음은 지역 정적 변수가 함수 호출 사이에 값을 유지하는 것을 보여주는 C 프로그램입니다.

#include <stdio.h>
void fun(){
    static int x; // 정적 변수의 기본값은 0
    printf("%d ", x);
    x = x + 1;
}
int main(){
    fun(); // 함수 호출이 끝나도 x의 값은 소멸하지 않음
    fun();
    return 0;
}

출력 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

0 1

fun() 함수가 두 번 호출되었지만, 정적 변수 x는 함수 호출이 종료되어도 값을 잃지 않습니다. 첫 번째 호출에서는 기본값 0이 출력되고, 두 번째 호출에서는 증가된 값 1이 출력됩니다. 만약 x가 일반 지역 변수였다면 매번 0만 출력되었을 것입니다. 이것이 지역 정적 변수의 핵심 동작 원리입니다.