C++

C++ 변수(Variables)의 범위- 지역, 전역 총정리

김구티2 2024. 2. 17. 16:55

1. 범위(Scope)의 개념

일반적으로 범위는 어떤 것을 작업할 수 있는 범위로 정의된다. 프로그래밍에서도 변수의 범위는 변수에 접근하거나 선언하거나 작업할 수 있는 프로그램 코드의 범위로 정의된다. 그런 변수 범위는 크게 두 가지 유형이 있다.

① 지역 변수 ② 전역 변수

2. 지역 변수

함수 또는 블록 내에서 정의된 변수는 해당 함수에 대한 '지역'이라고 한다.

① '{'과 '}' 사이의 모든 것이 블록 안에 있다고 한다.
② 지역 변수는 선언된 블록 외부에 존재하지 않는다. 즉, 해당 블록 외부에서 액세스하거나 사용할 수 없다.
③ 지역 변수 선언: 지역 변수가 블록 내부에 선언된다.

 

예시:

// CPP program to illustrate 
// usage of local variables 
#include<iostream> 
using namespace std; 

void func() 

     // this variable is local to the 
     // function func() and cannot be 
     // accessed outside this function 
     int age=18;  


int main() 

     cout<<"Age is: "<<age; 

     return 0; 

 

출력:

Error: age was not declared in this scope

 

위 프로그램은 "나이가 이 범위에 선언되지 않았다" 라는 오류를 표시한다. 변수 age가 함수 func() 내에 선언되었으므로 해당 함수에 지역적이고, 이 함수 외부의 프로그램 일부에는 표시되지 않는 것이다.

위의 오류를 수정하려면 함수 func()의 변수 age 값만 표시해야 한다.

 

예시:

// CPP program to illustrate 
// usage of local variables 
#include<iostream> 
using namespace std; 

void func() 

     // this variable is local to the 
     // function func() and cannot be 
     // accessed outside this function 
     int age=18; 
     cout<<age; 


int main() 

     cout<<"Age is: "
     func(); 

     return 0; 

 

출력:

Age is: 18

 

3. 전역 변수

이름에서 알 수 있듯이 전역 변수는 프로그램의 모든 부분에서 액세스할 수 있다.

① 프로그램의 수명 동안 사용할 수 있다.
② 모든 기능 또는 블록 외부의 프로그램 맨 위에 선언된다.
③ 전역 변수 선언: 전역 변수는 일반적으로 프로그램 상단의 모든 함수와 블록 외부에서 선언된다. 프로그램의 어느 부분에서나 액세스할 수 있다.

 

예시:

// CPP program to illustrate 
// usage of global variables 
#include<iostream> 
using namespace std; 

// global variable 
int global = 5; 

// global variable accessed from 
// within a function 
void display() 

     cout<<global<<endl; 


// main function 
int main() 

     display(); 

     // changing value of global 
     // variable from main function 
     global = 10; 
     display(); 

 

출력:

5

10

 

프로그램에서 변수 "global"은 모든 기능을 제외한 프로그램의 맨 위에 선언되므로 전역 변수이며, 프로그램 내 어디에서나 액세스하거나 업데이트할 수 있다.

 

그렇다면, 함수 내부에 전역 변수와 동일한 이름을 가진 지역 변수가 존재하면 어떻게 될까?
만약 함수 내부에 전역 변수와 같은 이름의 변수가 있고, 함수가 해당 이름의 변수에 접근하려고 하면 어떤 변수가 우선순위로 주어질까? 지역 변수 또는 전역 변수 중 어느 변수가 우선순위로 주어질까? 이를 예시를 통해 이해할 수 있을 것이다.

 

예시:

// CPP program to illustrate 
// scope of local variables 
// and global variables together 
#include<iostream> 
using namespace std; 

// global variable 
int global = 5; 

// main function 
int main() 

     // local variable with same 
     // name as that of global variable 

     int global = 2; 
     cout << global << endl; 

 

위의 프로그램에서 맨 위에 선언된 변수 "global"은 전역이며 5를 저장한다. 그리고 메인 함수 안에 선언된 변수는 지역이고 2를 저장한다. 그러면 문제는 "global"이라는 변수에 저장된 값이 메인 함수에서 언제 출력이 되는가 하는 것이다.

보통 이름이 같은 두 개의 변수가 정의되면 컴파일러는 컴파일 시간 오류를 발생시킨다. 하지만 변수가 다른 범위에서 정의되면 컴파일러는 이를 허용한다.
전역 변수의 이름과 동일한 이름으로 정의된 지역 변수가 있을 때마다 컴파일러가 지역 변수에 우선 순위를 부여한다.

 

예시:

// C++ program to show that we can access a global 
// variable using scope resolution operator :: when 
// there is a local variable with same name 
#include<iostream> 
using namespace std; 

// Global x 
int x = 0; 

int main() 

     // Local x  
     int x = 10; 
     cout << "Value of global x is " << ::x; 
     cout<< "\nValue of local x is " << x; 
     return 0; 

 

출력:

Value of global x is 0
Value of local x is 10

728x90

'C++' 카테고리의 다른 글

C++ 리터럴(Literals) 총정리  (0) 2024.02.20
C++ 정적 키워드 총정리  (0) 2024.02.20
C++ 변수(Variables) 총정리  (1) 2024.02.17
C++ 상수(Constants) 총정리  (1) 2024.02.16
C++ 키워드(Keywords) 총정리  (1) 2024.02.16