사용 형식
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 예약어를 사용하면 함수를 정의한 소스 파일에서만 사용할수 있다. 따라서 다른 파일에서 잘못 호출할 가능성을 사전에 차단할 수 있고, 다른 파일에서 같은 이름의함수를 정의할 수 있다.
'프로그래밍 언어 > c(일반)' 카테고리의 다른 글
포인터(2) - 포인터 배열 / 배열 포인터 (0) | 2024.07.11 |
---|---|
extern 구조체 또는 변수 사용법 및 예시 (0) | 2024.05.08 |
삼항 연산자 (0) | 2024.05.06 |
연산자 정리 (0) | 2024.05.02 |
포인터(1) - 포인터 변수 (0) | 2024.05.02 |