[C언어] 11. 변수의 범위
변수의 범위 (Scope)
변수는 선언되는 위치에 따라 사용할 수 있는 범위가 달라집니다.
특정 범위에서만 활용할 수 있는 지역(local)변수
와 어디에서든 사용할 수 있는 전역(global)변수
가 있습니다.
변수의 생성 위치
int main(){
int a;
int k;
return 0;
}
void func(){
int m;
int l;
}
보통 변수는 해당 블럭(중괄호 내부) 가장 위에서 생성하는 것이 가독성에 좋습니다.
변수의 선언 위치가 뒤죽박죽으로 섞여있다면, 해당 변수를 찾기 힘들겠죠?
지역변수 (local 변수)
해당 지역에서만 사용이 가능한 변수를 지역변수 (local 변수)
라고 합니다
함수 내부, 조건문 내부 등 내부에서 선언하는 경우, 지역변수로 선언이 되며, 일정 지역 내부에서만 사용이 가능합니다.
해당 블럭이 끝난 경우, 더이상 해당 변수는 사용할 수 없습니다.
단, 함수 내부에서 선언된 조건문, 반복문에서는 함수 내부에 선언된 변수에 접근이 가능합니다.
int main(){
int a;
return 0;
}
메인 함수 내부에서 선언한 경우도 지역 변수입니다.
메인함수를 벗어나면 메인함수의 변수는 활용할 수 없습니다.
전역변수 (global 변수)
선언된 위치부터 프로그램이 끝날 때까지 모든 위치에서 사용할 수 있는 변수입니다.
메인함수 외부, 헤더파일 바로 아래에서 생성합니다.
#include <stdio.h>
int a;
int main() {
...
return 0;
}
#include<stdio.g>
int a;
int b = a; //error
쓰래기 값이 기본으로 저장되는 지역변수와는 다르게, 전역변수는 기본적으로 0 으로 초기화 됩니다.
또, 전역변수 초기화는 무조건 상수로 진행해야 합니다.
정적변수 (static 변수)
#include <stdio.h>
void getNum();
void getnum()
int main() {
for (int i = 0; i < 5; i++)
getnum();
// 0 0 0 0 0 출력
for (int i = 0; i < 5; i++)
getNum();
// 0 1 2 3 4 출력
return 0;
}
void getNum() { // static
static int num = 0;
printf("%d", num++);
}
void getnum(){
int num = 0;
printf("%d", num++);
}
변수가 선언되어있는 블럭이 끝나도 변수의 할당 공간이 사라지지 않는 변수입니다.
getnum
함수를 실행하는 반복문을 보면, 함수가 끝나면 해당 블럭이 소멸되어 변수 데이터가 사라집니다.
하지만 getNum
함수는 변수를 static
으로 선언하여 함수가 끝나도 변수의 데이터가 사라지지 않습니다.
static의 기능은 이것 이외에도 외부 파일에서 접근할때 활용하는 기능이 있습니다.
이 기능에 대하여는 이후에 더 설명하도록 하겠습니다.
💡 지적 환영합니다
Comments