정적변수(static variable)
정적변수는 선언 위치에 따라 활용도가 다르며 변수 앞에 static을 붙여서 선언한다.
static int var = 0;
함수 외부에 선언
함수 외부에 선언한 정적변수는 선언한 파일에서만 호출이 가능하다. 즉, 선언한 파일 내부의 함수들은 사용 가능하지만 선언한 파일 외부의 함수들은 사용이 불가능하다. 전역변수가 extern 키워드로 다른 파일에서 호출이 가능한 것과는 다르다.
#include <stdio.h> #include <string.h> static int add = 0; int main() { }
함수 내부에 선언
함수 내부에 선언된 지역변수는 함수가 소멸시 지역변수도 함께 소멸하지만 정적변수는 소멸되지 않고 메모리에 저장되어있다. 따라서 동일 함수를 여러 번 호출하더라도 함수 내 정적변수는 처음 호출된 한 번만 초기화된 후 이후에는 소멸하거나 초기화를 하지 않고 이전 상태를 저장하고 있다.
#include <stdio.h> #include <string.h> void TestStatic() { static int add = 0; add++; printf("static add : %d\n", add); } int main() { for(int i=0 ;i<5; i++) { TestStatic(); // 5번 호출 } }
위 코드에서 TestStatic() 함수는 add변수를 1 더한다. add변수가 static이 아니라면 함수가 호출될 때마다 add는 1로 출력되겠지만 static으로 선언되었으므로 함수가 호출될 때마다 이전 함수에서 1 더해진 add값을 그대로 가져온다.
정적변수(static variable) vs 전역변수(global variable)
정적변수 | 전역변수 | |
---|---|---|
생애주기 | 프로그램 생성부터 소멸까지 | 프로그램 생성부터 소멸까지 |
다른파일에서 접근 허용 | 불가능 | 가능 |
0으로 초기화 | 예 | 예 |
사용 범위 | 함수 외부 선언 : 선언된 파일 함수 내부 선언 : 중괄호 내부 | 프로그램 전체 |
저장 위치 | Data 영역 | Data 영역 |
목적 | 함수 소멸과 무관한 값의 유지가 필요 | 어디서든 사용이 필요 |