지역 변수의 사용 범위는 블록 내부로 제한 되므로 다른 함수에서는 사용할수 없다
void assign(void);
int main(void)
{
int a = 0;
assign();
printf("main 함수 a : %d\n",a);
return 0;
}
void assign(void)
{
int a;
a = 10;
printf("assign 함수 a :%d\n", a);
}
위와 같이 assign함수와 main함수 두군데 에서 a라는 정수형 변수가 사용되었다
하지만 출력 값은 assign함수 a는 10 main 함수 a 는 0이 된다
둘의 결과가 같지 않은 이유는 다음과 같다

main 함수 a와 assign 함수 a는 이름만 같을 뿐 서로다른 독립적인 저장 공간을 갖는다
지역 변수는 함수의 호출이 끝나면 운영체제가 자동적으로 저장 공간을 회수하기 하기 떄문에 공간을 유지하지 않아도 된다
지역 변수는 사용 범위가 제한되기 떄문에 문제가 있는 값을 발견 및 수정이 쉽다
int main(void)
{
int a = 10;
int b = 20;
printf("교환 전 a와 b의 값 : %d ,%d\n ", a, b);
{
int temp;
temp = a;
a = b;
b = temp;
}
printf("교환 후 a와 b의 값 : %d ,%d\n ", a, b);
return 0;
}
코드를 실행 하면 교환 전 a,b는 10,20 교환후 20,10이다
지역 변수가 main 함수에서 호출 되면 main 함수 블록 전체에서 사용할수 있다
하지만 변수가 둘 이상이면 가까운 블록 변수를 사용하게 된다
int main(void)
{
int a = 10;
int b = 20;
printf("교환 전 a와 b의 값 : %d ,%d\n ", a, b);
{
int a = 20;
int b = 10;
int temp;
temp = a;
a = b;
b = temp;
}
printf("교환 후 a와 b의 값 : %d ,%d\n ", a, b);
return 0;
}
a,b가 main함수 안에 블럭 안에서 생성되면 새로운 a,b는 블럭 안에서 사용할수있다
전역 변수는 함수 밖에서 호출하면 된다
함수에 포함되지 않으므로 사용 범위 제한이 없다
하지만 전역 변수와 이름이 같은 지역 변수가 함수내에 존재한다면
함수는 지역 변수를 우선적으로 사용한다
정적 지역 변수와 일반 지역 변수의 차이는 메모리 존재 기간에 따라 다르다
void static_func(void)
{
static int a = 0;
a++;
printf("%d\n", a);
}
void func(void)
{
int a = 0;
a++;
printf("%d\n", a);
}
두개의 함수를 main함수에서 각각 3번씩 호출 했다고 가정하면
정적 변수를 사용한 함수는 1,2,3 을 일반 지역 변수를 사용한 함수는 1,1,1을 출력할거다
여기서 두개의 차이점이 나타난다
정적 지역 변수는 지역 지만 메모리 할당과 유지는 전역변수와 같다