00 개요
- 목적: C 언어를 공부하는데 지역 변수, 전역 변수 용어들이 등장해서 정리하고자 함
- C 언어에서 변수는 크게 지역, 전역, 그리고 static 변수로 나뉨
- 각 변수의 종류는 변수의 범위와 수명 등에서 차이가 있음
01 지역 변수 (Local Variable)
1. 정의
- 특정 블록 { }에서 선언된 변수, 블록 내에서만 사용 가능
- 보통 함수 내에서 사용됨
- 지역 변수는 함수가 호출되면 생성되며 함수 종료 시 소멸됨 (메모리 stack영역에 저장되기 때문)
2. 예시
#include <stdio.h>
void test() {
int num = 10; // 지역 변수 num 선언
printf("%d\n", num);
}
int main() {
test();
printf("%d\n", num);
return 0;
}
- 소스 코드 및 결과 설명:
- test() 함수 내에서 선언된 'num'은 지역 변수임
- 즉, 'num'은 함수 내에서만 사용할 수 있으므로 main() 함수에서는 'num' 사용 불가
- 그러므로 printf()에서 컴파일 에러(C2065)가 발생한 것
02 전역 변수 (Global Variable)
1. 정의
- 모든 함수가 접근 가능한 변수
- 함수 외부에서 선언되며 초기화하지 않으면 0으로 초기화됨
- 프로그램이 시작될 때 생성되며 프로그램 종료될 때까지 유지됨
- 즉, 프로그램 모든 곳에서 쓰이며 메모리 data영역에 저장됨
2. 예시
#include <stdio.h>
int num = 10; // 전역 변수 num 선언
void test() {
printf("%d\n", num);
}
int main() {
test();
printf("%d\n", num);
return 0;
}
- 소스 코드 및 결과 설명:
- 'num'은 전역 변수로 선언됨
- main() 함수와 test() 함수에서 모두 사용 가능
03 정적 변수 (Static Variable)
1. 정의
- 지역 변수 또는 전역 변수 앞에 'static' 키워드를 붙여서 선언함
- static 지역 변수: 함수 내에서 선언되어 함수 호출이 끝나도 값을 유지함
- static 전역 변수: 다른 전역 변수와 마찬가지로 프로그램이 종료될 때까지 값을 유지함
- static 변수는 선언된 블록에서만 사용 가능, 다른 함수나 블록에서는 접근 불가
- static 변수는 전역 변수와 마찬가지로 초깃값을 지정하지 않으면 0으로 초기화됨
2. 예시
#include <stdio.h>
void test() {
static int num = 10; // static 지역 변수 num 선언
num++;
printf("%d\n", num);
}
int main() {
test();
test();
test();
return 0;
}
- 소스 코드 및 결과 설명:
- test() 함수 내에서 선언된 'num'은 static 지역 변수임
- 이 변수는 함수가 호출될 때 생성되며 함수가 종료되어도 유지됨
- 따라서 test() 함수에서 세 번 호출 시 num의 값이 11에서 13까지 증가함
04 변수 선택 시 고려 사항
- 변수 선언 시 변수가 어디에서 사용될지, 어떤 범위와 수명을 가져야 하는지를 고려하여 변수 종류를 선택해야 함
- 지역 변수는 함수 내에서만 사용되는 데이터를 저장할 때, 전역 변수는 여러 함수에서 공유해야 하는 데이터를 저장할 때, static 변수는 함수 내에서 유지되어야 하는 데이터를 저장할 때 사용됨
- 전역 변수와 static 변수는 메모리 공간을 차지하므로 변수의 개수가 많아지면 전체 프로그램의 메모리 사용량이 증가함, 또한 어디에서나 접근 가능하기에 다른 함수/블록에서 값 변경 시 예기치 않은 결과 발생 가능
- → 전역 변수와 static 변수는 최소한으로 사용하는 것이 좋음
- 지역 변수는 함수 내에서만 사용되기에 변수의 사용 범위가 한정되어 있어 다른 함수나 블록에서 접근 불가
- → 변수 값을 보호하는데 도움이 됨
- 함수가 호출될 때마다 생성되고 소멸되므로 메모리 사용량도 적음
참조
'C' 카테고리의 다른 글
# 및 ## (C 언어 매크로 연산자) (0) | 2024.06.25 |
---|---|
자료형 종류 (C 언어) (0) | 2024.06.24 |
extern와 static (키워드) (0) | 2024.06.24 |
Declaration vs Definition (선언과 정의) (0) | 2024.06.24 |
typedef (자료형 별칭 부여 키워드) (0) | 2024.06.21 |