C언어 공부/C언어 강의
챕터 6-3 : 스코프
anna59
2026. 3. 6. 17:32
수업 목표
- 스코프가 무엇인지 배워본다.
- 블럭 스코프와 파일 스코프에 대해 배워본다.
스코프(Scope)
변수나 함수 이름을 사용할 수 있는 범위를 뜻합니다.
스코프의 종류
1. 블럭 스코프(Block Scope)
2. 파일 스코프(File Scope)
블럭 스코프(Block Scope)
중괄호 내부에 선언된 변수는 해당 중괄호 내부에서만 사용할 수 있습니다.
조건문, 반복문 같은 문(statement)에 사용되는 중괄호 범위도 블럭 스코프라고 합니다. 블럭 스코프 안에 또 다른 블럭 스코프가 들어갈 수도 있습니다. 바깥쪽 블럭 스코프에서 안쪽 블럭 스코프에 선언된 지역 변수에 접근 불가능합니다. 반대로 바깥쪽 블럭 스코프에 선언된 지역 변수를 안쪽 블럭 스코프에서는 접근 가능합니다.
Ex060301) 블럭 스코프
아래 소스코드의 출력결과를 예측해보고 예측한 결과와 실행 결과를 비교해봅시다.
// Main.c
#include <stdio.h>
int main(void)
{
int Num1 = 10;
printf("Num1: %d\n", Num1);
{
int Num2 = 100;
int Result = Num1 + Num2;
printf("Result: %d\n", Result);
printf("Num1: %d\n", Num1);
}
/* 만약, block scope가 없었다면..? */
/*
block scope 내부에 선언된 변수들은 접근 불가능.
printf("Num2: %d\n", Num2);
printf("Result: %d\n", Result);
*/
return 0;
}
<예상 출력값>
10
Result: 110
Num1: 10
<실제 출력값>
Num1: 10
Result: 110
Num1: 10
printf 메세지 내용을 놓쳤다.
코드를 천천히 잘 읽어볼 것.
변수 가리기(Variable Shadowing) 금지
블럭 스코프가 다르면, 같은 변수명을 가진 변수들을 선언할 수 있습니다.
그러나 이런 코드를 절대 작성하지 맙시다.
// Main.c
#include <stdio.h>
int main(void)
{
int MyScore = 87;
{
int MyScore = 95; /* Bad. */
printf("MyScore: %d\n", MyScore);
}
printf("MyScore: %d\n", MyScore);
return 0;
}
파일 스코프(File Scope)
어떤 블럭 스코프에도 속하지 않고, 파일에 작성된 경우입니다.
// Main.c
#include <stdio.h>
int FileScopeVariable = 0; // 파일 스코프에 선언된 변수. -> 전역변수
int ReturnZero(void) // 파일 스코프에 선언 및 정의된 함수. -> 전역함수
{
return 0;
}
int main(void)
{
return 0;
}