본문 바로가기
프로그래밍 언어/c(일반)

static 정적 변수

by [Akashic Records] 개발의선지자 2024. 5. 7.

사용 형식

static 변수명

static 반환형 함수명

 

static 변수는 매개변수로 사용할수 없다.

 

1. 정적 지역 변수

- 선언위치 : 코드 블록 내부

- 사용 범위 : 선언 ~ 선언한 블록 끝

- 메모리 저장 위치 : Data 영역(해당 영역에는 static 변수와 전역 변수가 저장됨)

- 메모리 존재 기간 : 프로그램 시작~ 종료 

- 자동 초기화 : 0으로 초기화

* 정적 지역 변수  선언된 블록 안에서만 사용하는 전역 변수와 같다.

그러나 코드 블록 내부에서만 접근 가능하다

 

#include<stdio.h>

void static_func(void);

int main()
{
	int i;
    
    for(i=0;i<3;i++){    
    	static_func();
    }
    
}

void static_func(){

	static int a; // static variable
    a++;
    printf("%d\n", a);
}

 

위 코드 출력 결과 

1

2

3

 

2.정적 전역 변수

선언 위치 : 함수 외부

사용 범위 : 하나의 파일 내부 

메모리 저장 위치 : Data 영역(해당 영역에는 static 변수와 전역 변수가 저장됨)

메모리 존재 기간 : 프로그램 시작~ 종료 

자동 초기화 : 0으로 초기화

* 다른 파일에서 전역 변수를 공유하지 못하게 할 때(정보은닉)는 static 예약어 사용.

* 전역 static 변수는 extern 변수 선언을 하더라도 외부 파일에서 접근할수 없다

 

아래 예제는 분할 컴파일 예제이다.

 

main.c

//input.c
#include <stdio.h>
extern int count; //main.c 전역변수 count 공유
int total = 0;

int input_data(void)
{

	int pos;
    while(1){
    	printf("input : ");
        scanf("%d", &pos);
        if(pos < 0) break;
        count++;
        total +=pos;
    }
	return total;
}

 

input.c

//main.c
#include <stdio.h>

int input_data();
int print_data();

int count = 0;
static int total = 0; //전역 static 변수

int main()
{
	total = input_data();
    print_data();
    
    return 0;
}

int print_data()
{
	printf("count : %d\n" , count);
}

 

정적 전역 변수는 하나의 파일에서만 사용하고 다른 파일과의 공유를 차단하므로 다른 파일에서 같은 이름의 전역변수를 사용 할 수 있다. 또한 사용 범위를 하나의 파일로 제한하므로 데이터를 보호할 때 유용(정보 은닉)

 

3.정적 함수

형식 : static 반환형 함수명

함수에 static 예약어를 사용하면 함수를 정의한 소스 파일에서만 사용할수 있다. 따라서 다른 파일에서 잘못 호출할 가능성을 사전에 차단할 수 있고, 다른 파일에서 같은 이름의함수를 정의할 수 있다.