지역 변수는 함수가 호출되면 생성되며 함수 종료 시 소멸됨 (메모리 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 변수는 최소한으로 사용하는 것이 좋음
지역 변수는 함수 내에서만 사용되기에 변수의 사용 범위가 한정되어 있어 다른 함수나 블록에서 접근 불가