extern (고급)
Static 변수와 Extern 변수는 C언어에서 변수의 스코프(visibility)와 생명 주기(lifetime)를 관리하는 데 사용되는 키워드이다. 이 둘의 주요 차이점은 다음과 같다:
Static 변수:
- 스코프: Static 변수는 선언된 범위(함수 내부 또는 파일 내부)에 제한된다.
- 생명 주기: 프로그램 실행 시작 시 할당되고 프로그램 종료 시 해제된다.
- 목적: 같은 파일 내에서만 접근 가능한 변수를 만들거나, 함수 호출 간 상태를 유지할 수 있는 지역 변수를 선언하는 데 사용된다.
Extern 변수:
- 스코프: Extern 키워드는 다른 파일에 정의된 전역 변수나 함수를 참조하는 데 사용된다.
- 생명 주기: 해당 변수가 정의된 파일 내에서 프로그램 실행 시작 시 할당되고 프로그램 종료 시 해제된다.
- 목적: 프로그램의 다른 파일들 간에 공유되는 전역 변수에 접근하거나, 다른 파일에 정의된 함수를 호출하는 데 사용된다.
⭐1. Static 변수
static_example.c
#include <stdio.h>
void incrementCounter() {
static int counter = 0; // static 지역 변수
counter++;
printf("Counter: %d\n", counter);
}
int main() {
incrementCounter(); // 출력: Counter: 1
incrementCounter(); // 출력: Counter: 2
return 0;
}
이 예시에서 counter 변수는 incrementCounter 함수 내에 static으로 선언되어 있다. 따라서 함수가 호출될 때마다 counter의 값은 유지되며, 함수의 실행이 끝나도 counter의 값은 사라지지 않는다.
⭐2. Extern 변수
shared_var.c
int sharedVar = 10; // 다른 파일에서 접근할 전역 변수
main.c
#include <stdio.h>
extern int sharedVar; // 다른 파일에 정의된 전역 변수를 참조
int main() {
printf("Shared Variable: %d\n", sharedVar); // 출력: Shared Variable: 10
return 0;
}
이 예시에서 counter 변수는 incrementCounter 함수 내에 static으로 선언되어 있다. 따라서 함수가 호출될 때마다 counter의 값은 유지되며, 함수의 실행이 끝나도 counter의 값은 사라지지 않는다.
sharedVar 변수는 shared_var.c 파일에 전역 변수로 정의되어 있으며, main.c에서는 extern 키워드를 사용하여 이 변수를 참조한다. 이를 통해 main.c 파일 내에서 sharedVar 변수의 값을 접근하고 사용할 수 있다.
Static 변수와 Extern 변수는 서로 다른 목적과 사용 사례를 가지고 있다. Static 변수는 주로 함수 내부에서 상태를 유지하거나, 파일 내부에서만 접근할 수 있는 변수를 만들고자 할 때 사용된다. 반면, Extern 변수는 프로그램의 여러 파일 간에 공유되어야 하는 전역 변수에 대한 접근을 제공하기 위해 사용된다.
728x90
반응형
'Language > C언어' 카테고리의 다른 글
[C/C++ Tip] 19. C언어 조건문 마스터하기 : 삼항연산자 (0) | 2024.11.05 |
---|---|
[C/C++ Tip] 18. C언어 조건문 마스터하기 : if문의 모든 것! (0) | 2024.11.05 |
[C/C++ Tip] 16. Extern 중복 문제 해결 (Include Guard) (0) | 2024.11.02 |
[C/C++ Tip] 15. extern 기본 (0) | 2024.11.02 |
[C/C++ Tip] 14. 동적 메모리 할당 (0) | 2024.10.29 |