C 프로그래밍 언어에는 총 네 가지 저장 클래스(storage class)가 존재합니다.
- auto
- extern
- static
- register
정적(Static) 변수란?
정적 변수를 선언할 때 사용하는 키워드는 static입니다.
주요 특징
- 정적 변수는 프로그램이 실행되는 동안, 그리고 함수 호출 사이에서도 자신의 값을 계속 유지합니다.
- 정적 변수는 프로그램 실행 중 단 한 번만 초기화됩니다.
또한 정적 변수의 기본값(default value)은 0입니다. 별도로 초기화하지 않고 선언하면 자동으로 0이 할당됩니다.
예제 1: static 변수의 값 유지 확인
다음은 static 저장 클래스를 사용한 C 프로그램입니다.
#include<stdio.h>
main ( ){
inc ( );
inc ( );
inc ( );
}
inc ( ){
static int i =1;
printf ("%d", i);
i++;
}
실행 결과
1 2 3
static 변수 i는 함수가 여러 번 호출되어도 이전 값을 기억하고 있으므로 1, 2, 3이 순서대로 출력됩니다.
예제 2: auto 변수와 비교
같은 코드를 auto 저장 클래스로 바꾼 예제입니다.
#include<stdio.h>
main ( ){
inc ( );
inc ( );
inc ( );
}
inc ( ){
auto int i=1;
printf ("%d", i);
i++;
}
실행 결과
1 1 1
auto 변수는 함수가 호출될 때마다 새로 생성되고 초기화되므로 매번 1만 출력됩니다. 이 예제를 통해 static과 auto의 동작 차이를 명확하게 확인할 수 있습니다.
예제 3: 함수 내 static 변수 활용
다음은 static 저장 클래스를 활용한 세 번째 C 프로그램 예제입니다.
#include <stdio.h>
//함수 선언
void function();
int main(){
function();
function();
return 0;
}
//함수 정의
void function(){
static int value= 1; //static 변수 선언
printf("\nvalue = %d ", value);
value++;
}
실행 결과
value = 1 value = 2
함수가 두 번 호출되었지만, static 변수 value는 첫 호출 시에만 초기화되고 이후에는 증가된 값이 그대로 유지되므로 위와 같은 결과가 출력됩니다.