2023.1.9. 최초 작성
static 이란 키워드는 “정적인”이란 의미가 있다. 변수명이나 함수명 앞에 붙일 수 있다.
static 변수와 static 함수는 extern 키워드를 사용해도 다른 파일에서 접근할 수 없고 같은 파일 내에서만 사용해야 한다.
아래 코드는 main 함수를 가지고 있는 첫 번째 C 소스 파일이다.
#include <stdio.h>
extern int a;
//extern int b;
extern void f01();
//extern void f02();
void main() {
f01();
//f02();
printf("main 함수 안에서 a : %d\n", a);
//printf("main 함수 안에서 b : %d\n", b);
}
extern이 붙어 있는 변수와 함수는 두 번째 C 소스 파일에 정의되어있는데 첫 번째 C 소스 파일에서 사용하고자 한다.
아래 코드는 두 번째 C 소스 파일이다. static이 있는 것과 없는 것이 있다.
#include <stdio.h>
int a = 10;
static int b = 20;
static void f02() {
printf("f02 함수 실행..\n");
}
void f01() {
printf("f01 함수 실행..\n");
printf("f01 함수 안에서 a : %d\n", a);
printf("f01 함수 안에서 b : %d\n", b);
f02();
}
[실행 결과]
f01 함수 실행..
f01 함수 안에서 a : 10
f01 함수 안에서 b : 20
f02 함수 실행..
main 함수 안에서 a : 10
두 번째 파일에 정의되어있는 b 변수와 f02 함수는 첫 번째 파일에서 직접 사용할 수 없다. 대신 두 번째 파일에 정의된 함수 중 static이 아닌 f01 함수 안에서 같은 파일에 정의된 static 변수와 함수는 접근하도록 한다.
그리고 첫 번째 파일의 main 함수에서 두 번째 파일의 f01을 호출하는 방식으로 사용할 수 있다.
지역변수는 함수가 호출될 때 메모리에 생성되고 함수가 종료될 때 사라진다.
하지만 static 변수는 전역변수와 마찬가지로 프로그램이 처음 시작될 때 메모리에 생성되고 종료될 때 메모리에서 사라진다. 변수의 라이프 사이클이 다르다.
지역변수는 선언할 때 초기화하지 않으면 쓰레기 값을 가지지만 static 변수와 전역변수는 값을 초기화하지 않아도 0을 가진다.
위 예제 코드에서 주석을 제거하면 static에 접근하지 못하여 실행에서 에러가 발생한다.
'프로그래밍 > C' 카테고리의 다른 글
2차원 배열도 1차원 배열이다. (0) | 2023.01.09 |
---|---|
배열의 이름은 주소이다. (0) | 2023.01.09 |
C언어 함수 (0) | 2023.01.08 |
외부 변수(extern)와 헤더파일 만들기 (0) | 2023.01.05 |
레지스터 변수 (0) | 2023.01.05 |