프로그래밍/C

static 변수와 static 함수

swedu 2023. 1. 9. 15:34
728x90
반응형

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에 접근하지 못하여 실행에서 에러가 발생한다.

 
728x90
반응형

 

728x90
반응형

'프로그래밍 > 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