- 4.2.1 전역 변수(Global Variables)
- 4.2.2 정적 변수(Static Variables)
4.2.1 전역 변수(Global Variables)
전역 변수란 함수 내에서 정의되지 않고 어디에도 종속되지 않은 변수를 뜻한다. 코드상에서 어느 중괄호 안에도 안 들어가면 전역 변수가 된다. 초기 할당이 진행되었다면 프로그램이 끝날 때까지 존재하며 extern 키워드를 사용하면 모든 파일에서 접근이 가능하다.
#include <iostream>
using namespace std;
// global variable
int value = 123;
int main()
{
// 전역 변수가 출력
cout << value << endl;
// name hiding
int value = 1;
// 영역 연산자(전역 변수를 출력시킨다)
cout << ::value << endl;
// 지역 변수가 출력
cout << value << endl;
return 0;
}
전역 변수 value가 할당되고나면 접근이 가능해지는데, 지역 변수가 동일한 이름으로 작성되면 name hiding으로 인해 지역 변수를 먼저 접근하게 된다. 하지만 영역 연산자 ::를 사용하게 되면 지역 변수가 아닌 전역 변수로 접근해서 데이터를 사용할 수 있다.
4.2.2 정적 변수(Static Variables)
정적 변수도 할당이 되면 프로그램이 끝날 때까지 존재하기 때문에 전역 변수와 비슷하다고 생각될 수 있지만 조금 특성이 다르다. 정적 변수는 최초 초기화는 반드시 소스 파일에서 해야 하는 특징이 있다. 또한 정적 변수의 경우 선언된 파일 안에서만 사용이 가능하고 선언된 파일 이외에서는 사용이 불가능하다.
#include <iostream>
using namespace std;
// 해당 cpp 안에서만 전역으로 사용하는 변수 다른 곳에서는 접근 불가능
static int static_global_variable = 1;
void doSomething()
{
// 정적 변수(메모리가 static이다, 메모리가 정적으로 선언된다)
static int a = 1;
++a;
cout << a << endl;
}
int main()
{
cout << "정적 변수 테스트" << endl;
// 정적 변수 테스트
doSomething();
doSomething();
doSomething();
doSomething();
return 0;
}
정적 변수는 특정 함수가 몇번 호출되는지 디버깅할 때 쓰면 유용하다. 전역 변수 같지만 선언된 함수 블럭 내에서만 같은 메모리를 사용하며, 함수 내부에 선언되어 있다면 외부에서는 접근할 수 없다. 물론 전역 변수의 위치에서 선언하면 전역 변수처럼 접근하겠지만 이마저도 초기화된 파일에서만 가능하지 외부 파일에서의 접근은 불가능하다. 이러한 특징 때문에 내부 연결(Internal Linkage)라고 한다.
'Programming Language > C++' 카테고리의 다른 글
Section 4.4. using namespace (0) | 2021.11.13 |
---|---|
Section 4.3. 외부 연결 (0) | 2021.11.11 |
Section 4.1. 지역 변수, 범위, 지속기간 (0) | 2021.11.08 |
Section 3.5. 비트 플래그와 비트 마스크 (0) | 2021.11.07 |
Section 3.4. 이진수의 보수 개념과 비트단위 연산자 (0) | 2021.11.04 |