C++ 변수 유효 범위

변수를 선언했다고 해서, 프로그램 어느 곳에서나 사용할 수 있는 것은 아니다

 

변수가 선언된 위치에 따라 사용할 수 있는 범위가 결정

 

예를 들어 어떤 함수에서 value라는 변수를 선언하면 value는 해당 함수에서만 사용 가능하다

 

이를 지역 범위(local scope)라고 부른다

 

같은 지역 범위에서 이름이 같은 변수가 없는 '단일 정의 규칙'만 잘 지킨다면,

 

다른 범위에서는 같은 이름으로 변수를 선언해도 오류가 발생하지 않는다

 

#include <iostream>

using namespace std;

void print() {
	//함수 내부의 지역 변수
	int value = 10;
	cout << "print 함수 내부에서의 지역 변수 value: " << value << endl;
}
int main(){

	//main 함수 내부의 지역 변수
	int value = 5;
	cout << "main 함수 내부에서의 지역 변수 value: " << value << endl;

	//print 함수 호출
	print();

	//print함수 호출 후에도 main 함수의 value에 영향을 주지 않음
	cout << "다시 main 함수 내부에서의 지역 변수 value: " << value << endl;

	return 0;
}

 

 

etc-image-0

 

 

 

C++에는 많은 종류의 범위가 있는데

 

1) 구문 범위

 

if, for, while 등 구문 안에서만 유효

 

2) 지역 범위(블록 범위)

 

매개변수 이름을 포함해서, 함수 안에 선언한 이름은 해당 함수 내에서만 유효

 

3) 전역 범위

 

네임 스페이스나 클래스, 함수 등에 속하지 않고 외부에 선언한 이름

 

선언 지점부터 파일 끝까지 유효함

 

4) 클래스 범위

 

클래스 멤버의 이름은 선언 지점에 관계 없이 클래스 정의 전체에 걸쳐 확장

 

클래스 멤버에 대한 접근성은 접근 지정자(public, private 등)로 제어할 수 있다

 

5) 네임스페이스 범위

 

네임스페이스 안에 선언한 이름은 네임스페이스 안에서만 유효

 

서로 다른 파일들의 여러 블록에서 선언될 수 있다

 

#include <iostream>
using namespace std;

int value = 1; // 전역 변수

int main(){

	int value = -1; //지역 변수

	cout << value << endl; //지역변수 출력
	cout << ::value << endl; //전역변수 출력

	return 0;
}

 

 

etc-image-1

 

 

 

지역 범위 내에 전역 변수와 이름이 같은 변수가 없다면, 컴파일러는 전역 변수에 먼저 접근

 

그러나 위와 같이 지역 범위 내에 전역 변수와 같은 이름의 변수가 있는 경우, 지역 변수에 먼저 접근한다

 

이 때 :: 를 사용하면 전역 변수에 접근할 수 있다

 

하지만 전역 변수와 이름이 같은 지역 변수를 정의하는 것은 되도록 피해야한다.

 

의도하지 않은 실수를 범해 실수를 찾기 어려울 수 있다

 

지역과 전역을 구분하기 위해 전역변수에는 g_를 붙여서 g_value로 정의하는 경우도 있다

728x90

'프로그래밍 > C++' 카테고리의 다른 글

C++의 변수 형식 변환  (0) 2025.02.12
L-value와 R-value??  (0) 2025.02.12
C++에서 사용하는 데이터 형식  (0) 2024.12.30
C++ iostream, 입출력 cin, cout, 네임스페이스  (0) 2024.12.05
C++ 프로그램 빌드 과정  (0) 2024.11.24