C언어에서 변수를 선언할 때 extern과 static 키워드는 변수의 범위와 생명 주기를 결정하는 중요한 역할을 합니다. 이번 글에서는 C언어에서 extern과 static 변수의 차이점에 대해 알아보고, 각각의 특징과 사용법에 대해 자세히 설명하겠습니다.
1. extern 변수의 개념
extern 변수는 다른 파일에 정의된 전역 변수를 참조할 때 사용됩니다. 다른 파일에 정의된 변수를 참조해야 할 때 extern 키워드를 사용하여 해당 변수를 선언합니다. extern 변수는 선언만 해주고, 실제 메모리 공간은 변수가 정의된 파일에서 할당됩니다.
2. static 변수의 개념
static 변수는 특정 파일 내에서만 사용 가능한 지역 변수입니다. static 변수는 전역 변수처럼 프로그램이 실행될 때 생성되지만, static 변수는 해당 파일 내에서만 접근 가능하며 다른 파일에서는 참조할 수 없습니다.
3. extern 변수와 static 변수의 차이점
extern 변수와 static 변수의 주요 차이점은 다음과 같습니다.
-
범위: extern 변수는 다른 파일에서 정의된 전역 변수를 참조할 때 사용하며, static 변수는 해당 파일 내에서만 접근 가능합니다.
-
생명 주기: extern 변수는 변수가 정의된 파일에서 할당된 메모리를 참조하며, static 변수는 프로그램이 실행될 때 생성되고 프로그램이 종료될 때 소멸됩니다.
4. extern 변수와 static 변수의 사용 방법
extern 변수와 static 변수는 다음과 같이 사용합니다.
extern 변수 사용 방법
// file1.c
#include <stdio.h>
extern int globalVariable; // 다른 파일에 정의된 전역 변수를 참조하기 위해 extern 사용
void function() {
printf("globalVariable 값: %d\n", globalVariable);
}
// file2.c
#include <stdio.h>
int globalVariable = 100; // 다른 파일에서 참조될 전역 변수 정의
int main() {
function(); // extern을 통해 file1.c의 globalVariable을 사용
return 0;
}
static 변수 사용 방법
#include <stdio.h>
void function() {
static int count = 0; // 해당 파일 내에서만 접근 가능한 static 변수 선언
count++;
printf("count 값: %d\n", count);
}
int main() {
for (int i = 0; i < 5; i++) {
function();
}
return 0;
}
5. extern 변수와 static 변수의 예제
extern 변수와 static 변수를 조합한 예제를 살펴봅니다.
// file1.c
#include <stdio.h>
extern int globalVariable;
void printGlobal() {
printf("다른 파일에서 정의된 globalVariable 값: %d\n", globalVariable);
}
// file2.c
#include <stdio.h>
static int staticVariable = 10; // 해당 파일 내에서만 접근 가능한 static 변수 선언
int globalVariable = 100; // 다른 파일에서 참조될 전역 변수 정의
int main() {
printGlobal(); // extern을 통해 file1.c의 globalVariable을 사용
printf("staticVariable 값: %d\n", staticVariable);
return 0;
}
6. 결론
이번 글에서는 C언어에서 extern과 static 변수의 개념과 차이점에 대해 알아보았습니다. extern 변수는 다른 파일에서 정의된 전역 변수를 참조하는데 사용되며, static 변수는 해당 파일 내에서만 접근 가능한 지역 변수입니다. 적절히 활용함으로써 변수의 범위와 생명 주기를 효과적으로 관리할 수 있습니다.
'IT > c언어' 카테고리의 다른 글
C언어 헤더파일 중복방지 (0) | 2023.07.24 |
---|---|
C언어 파일 분할: 모듈화와 재사용성을 높이는 방법 (0) | 2023.07.24 |
C언어 매크로 ## 연산자: 강력한 문자열 결합 기능 (0) | 2023.07.24 |
C언어 #define 매개변수 결합과 문자열화: 매크로의 강력한 기능 (0) | 2023.07.24 |
C언어 #define _crt_secure_no_warnings 지시문: 안전하지 않은 함수 경고를 무시하고 컴파일하자 (0) | 2023.07.24 |
댓글