C

[내배캠자습]C언어 챕터 6-3 : 스코프

BreadMushroom 2026. 3. 29. 09:43

스코프(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;
}

변수 가리기(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;
}