본문 바로가기
프로그래밍언어/C언어[초급]

[C언어][초급] Chapter37. 지역 변수와 전역 변수 – 변수의 범위와 수명 이해하기

by about_IT 2025. 4. 18.

C언어에서 변수를 선언할 수 있는 위치에 따라 지역 변수전역 변수로 나눌 수 있습니다.

이 둘은 프로그램에서 사용되는 범위(scope)와 생존 기간(lifetime)이 다릅니다.
변수의 동작을 정확히 이해하기 위해서는 이 차이를 잘 구분할 줄 알아야 합니다.


● 지역 변수란?

지역 변수는 함수 내부에 선언되며, 그 함수 안에서만 유효합니다.

void show() {
    int x = 10;  // 지역 변수
    printf("x: %d\n", x);
}
  • 다른 함수에서는 이 변수에 접근할 수 없습니다.
  • 함수가 끝나면 변수도 함께 사라집니다.

● 전역 변수란?

전역 변수는 함수 밖에서 선언되며, 모든 함수에서 공유 가능합니다.

int count = 0; // 전역 변수

void increment() {
    count++;
}

int main(void) {
    increment();
    printf("count: %d\n", count);
    return 0;
}
  • 전역 변수는 프로그램이 시작될 때 생성되어 종료 시까지 유지됩니다.
  • 여러 함수에서 값을 공유하거나 누적할 때 사용됩니다.

● 지역 변수와 전역 변수 이름이 같을 때

int num = 10; // 전역 변수

void test() {
    int num = 20; // 지역 변수
    printf("%d\n", num); // 지역 변수가 우선
}

함수 안에서 같은 이름의 지역 변수가 있으면, 전역 변수는 가려지게 됩니다(우선순위 ↓).


지역 변수는 함수 안에서만 사용할 수 있어 안전하고 예측 가능한 코드를 만들 수 있습니다.
반면 전역 변수는 공유와 누적에는 편리하지만, 잘못 사용하면 프로그램의 복잡성을 증가시킬 수 있습니다.

적절한 상황에 맞게 두 변수를 사용하는 방법을 연습해봅시다.


● 실습 문제

문제 1

함수 show 내부에서만 사용하는 지역 변수 a를 선언하고 출력하세요.

 

문제 2

전역 변수 count를 선언하고, 두 함수에서 이 값을 증가시킨 뒤 출력하세요.

 

문제 3

함수 안에 선언된 변수는 다른 함수에서 사용할 수 있는지 설명해보세요.

 

문제 4

지역 변수와 전역 변수의 이름이 같을 때 어떤 값이 출력되는지 확인하는 코드를 작성하세요.

 

문제 5

전역 변수를 남용할 경우 생길 수 있는 문제점 한 가지를 설명해보세요.

 









▶ 정답 확인하기

정답 1

void show() {
    int a = 5;
    printf("a: %d\n", a);
}

 

정답 2

int count = 0;

void increase() {
    count++;
}

void add() {
    count += 2;
}

int main(void) {
    increase();
    add();
    printf("count: %d\n", count); // 결과: 3
    return 0;
}

 

정답 3

아니요. 지역 변수는 선언된 함수 안에서만 사용할 수 있습니다.
다른 함수에서는 그 변수에 접근할 수 없습니다.

 

정답 4

int value = 100;

void test() {
    int value = 200;
    printf("%d\n", value); // 출력: 200 (지역 변수가 우선)
}

 

정답 5

전역 변수를 남용하면, 여러 함수가 동시에 값을 수정할 수 있어
버그가 생기거나 디버깅이 어려워질 수 있습니다.