코가손의 블로그

C++ static, extern 본문

C++/문법

C++ static, extern

Cogason 2021. 11. 9. 21:32

지역 변수

 

지역 변수는 블록 스코프(영역)가 있고 블록이 소멸되면 따라 소멸되는 자동 주기를 가지고 있다.

 

 

전역 변수

 

함수 외부에서 정의된 변수를 전역 변수라고 한다.

전역변수는 정적 주기로, 프로그램이 시작할 때 생성되고 프로그램이 종료할 때 파괴된다(메모리->데이터 영역)

이것은 전역 변수가 정의된 시점부터 소스 파일의 끝까지 접근 가능하다는 것을 의미한다.

 

 

변수는 스코프(영역), 주기 외에도 링크라는 속성이 있다. 링크는 같은 이름의 여러 식별자가 같은 식별자를 참조하는지를 결정한다.

 

static

내부 링크가 있는 변수를 static 변수라고 한다. static 변수는 변수가 정의된 소스 파일 내에서 어디서나 접근할 수 있지만, 소스 파일 외부에서는 참조할 수 없다.

 

static함수는 static멤버 변수에만 접근이 가능하다.

해당하는 클래스 객체의 인스턴스에 종속적이지 않고, 객체 자체에 종속적일 때 사용된다.

// static 변수

...

static int _attack;
Marine::_attack = 6;  // 마린 클래스의 체력은 6

Marine m1 = new Marine();
m1._attack = 10;      // 생성한 인스턴스 체력은 10

static 변수는 .data 영역에 저장되기 때문에 지역을 벗어나면 유효성을 잃는 지역변수와 달리

프로그램이 시작될 때 부터 메모리에서 값이 유지된다.

같은 지역 안에서만 static 변수에 접근이 가능하다

// static 메소드

int GenerateId()
{
    static int s_id = 1;
    
    return s_id++;
}

 

extern

외부 링크가 있는 변수를 extern 변수라고 한다. extern 변수는 정의된 소스 파일과 다른 소스 파일 모두에서 접근할 수 있다.

 

 

기본적으로 전역 변수는 extern으로 간주하고 상수(const)전역 변수는 static 변수로 간주된다.

함수는 변수와 같은 링크 속성을 가져, 외부 링크로 기본 설정되지만 static 키워드를 통해 내부 링크로 설정할 수 있다.

'C++ > 문법' 카테고리의 다른 글

C++ 객체 생성  (0) 2021.11.11
C++ 정적 바인딩 vs 동적 바인딩  (0) 2021.11.11
C++ 깊은 복사 vs 얕은 복사  (0) 2021.11.11
컴파일 과정  (0) 2021.11.09
C++ 포인터 & 참조  (0) 2021.11.09
Comments