C 언어에서 범위(scope)란 프로그램 내에서 특정 식별자나 변수에 직접 접근할 수 있는 영역을 의미합니다. 즉, 변수를 어디에 선언했느냐에 따라 해당 변수를 참조할 수 있는 위치와 유효 기간이 결정됩니다.
C 언어의 범위 규칙은 크게 두 가지로 분류할 수 있습니다.
- 전역 변수(Global Variable)
- 지역 변수(Local Variable)
전역 변수(Global Variables)
전역 변수는 프로그램 내 어떤 함수에도 속하지 않는 외부 영역에서 선언·정의되는 변수입니다. 전역 변수는 프로그램이 시작될 때 생성되어 종료될 때까지 값을 유지하며, 프로그램이 실행되는 동안 어느 위치에서든 자유롭게 접근할 수 있습니다.
다음은 C 언어에서 전역 변수를 사용한 예제입니다.
예제
#include <stdio.h>
int s;
int main () {
int a = 15;
int b = 20;
s = a+b;
printf ("a = %d\n b = %d\n s = %d\n", a, b, s);
return 0;
}
실행 결과
a = 15 b = 20 s = 35
위 예제에서 변수 s는 함수 밖에서 선언된 전역 변수입니다. 따라서 main() 함수 안에서도 별도의 제한 없이 접근하여 a + b의 연산 결과를 저장할 수 있습니다.
지역 변수(Local Variables)
지역 변수는 블록({ }) 또는 함수 내부에서 선언·정의되는 변수입니다. 지역 변수는 해당 블록이나 함수 내부에서만 사용할 수 있으며, 블록이나 함수의 실행이 끝나면 메모리에서 사라집니다.
다음은 C 언어에서 지역 변수를 사용한 예제입니다.
예제
#include <stdio.h>
int main () {
int a = 15;
int b = 20;
a = a+b;
printf ("a = %d\n b = %d\n", a, b);
return 0;
}
실행 결과
a = 35 b = 20
위 예제의 a와 b는 모두 main() 함수 내부에서 선언된 지역 변수입니다. 따라서 main() 함수 안에서만 접근할 수 있으며, 다른 함수에서는 사용할 수 없습니다.
전역 변수 vs 지역 변수 비교 정리
두 변수의 차이를 한눈에 파악할 수 있도록 표로 정리하면 다음과 같습니다.
| 구분 | 전역 변수 | 지역 변수 |
|---|---|---|
| 선언 위치 | 모든 함수의 외부 | 블록 또는 함수 내부 |
| 접근 가능 범위 | 프로그램 전체 | 선언된 블록·함수 내부 |
| 생존 기간 | 프로그램 종료 시까지 유지 | 블록·함수 종료 시 소멸 |
| 초기화하지 않았을 때 | 0으로 자동 초기화 | 쓰레기 값(garbage value) 저장 |
이처럼 C 언어에서는 변수의 선언 위치가 곧 그 변수의 유효 범위와 생존 기간을 결정합니다. 전역 변수는 편리하지만 프로그램 어디서든 값이 변경될 수 있어 의도치 않은 오류를 유발할 수 있으므로, 가능하면 지역 변수를 활용하고 꼭 필요한 경우에만 전역 변수를 사용하는 것이 좋은 코딩 습관입니다.