본문 바로가기
C++

C++ extern 개념, 사용방법 정리

by Warehaus 2024. 4. 21.

 

 

C++ 개발을 하다보면 클래스별로, 기능별로 여러 파일을 만들어야 하는 경우가 있습니다.

 

다른 파일의 전역변수를 사용하는게 잘 되지 않아서

전역변수를 포기하고 별도의 객체를 만들어야 할지 고민하기도 하는데요.

 

이럴 때 도움이 되는 키워드 extern 에 대해 알아보겠습니다.

 

개요

 

 

개발을 하면서 두개의 소스코드 : a.cpp, main.cpp 를 만들었다고 가정해 봅시다.

a.cpp은 전역변수를 선언하고 있고, main.cpp는 이를 사용하는 코드입니다.

 

 

a.cpp

int test=123

 

 

main.cpp

#include <iostream>

using namespace std;

int main () {
    cout << test << endl;
    return 0;
}

 

 

위와같이 작성하는 경우 main.cpp 파일에서는 는 test 라는 전역변수에 대해 알지 못하기 때문에

빌드가 되지 않습니다.

 

main.cpp에서 a.cpp 에 선언 된 전역변수 test 를 사용하려면 어떻게 해야할까요?

 

C++에서 이런 문제를 해결하기 위한 키워드가 extern 입니다.

 

C++ 에서 extern 키워드는 다른 소스파일에서 선언한 전역변수를 호출하기 위해 사용됩니다.

 

 

extern 활용

 

위의 예시에서 main.cpp 를 아래와 같이 고쳐봅니다.

추가된 코드는 extern 을 이용한 전역변수 선언 외에는 없습니다.

 

#include <iostream>

using namespace std;

// extern declaration
extern int test;

int main () {
    cout << test << endl;
    return 0;
}

 

이렇게 main.cpp를 수정함으로써 우리는 a.cpp 파일에서 선언 한 test 전역변수를 사용할 수 있게 됩니다.

 

 

 

 

 

 

주의사항

 

C++ extern 키워드를 사용하면서 조심해야 할 점은 없을까요?

 

생각해봅시다.

 

여러 파일에 동일한 변수가 선언되어 있는경우 extern 은 어떻게 사용될까요?

 

사용하는 파일에서 어느 파일의 전역변수를 사용해야할 지 모르는 상황이 발생하게 됩니다.

 

extern 으로 선언한 변수는 반드시 한 파일에서만 초기화를 해야합니다.

 

 

static, extern 차이 점

 

선언 된 변수를 공유한다는 점에서 static과 extern 키워드 개념을 헷갈리시는 분들도 간혹 있는 것 같습니다.

 

개념을 다시한번 짚고 넘어가 보겠습니다.

 

static 변수의 개념 :

  • extern 변수는 다른 파일에 정의 된 전역변수를 참조하는 경우 사용합니다.
  • 실제 메모리 공간은 사용하는 파일이 아닌, 변수가 정의된 파일에서 할당하게 됩니다.

 

extern 변수의 개념:

  • static 변수는 특정 파일 내에서만 사용 가능한 지역변수 입니다.
  • 프로그램이 실행될 때 생성되지만 해당 파일 내에서만 접근 가능하다는 점에서 extern과 차이가 있습니다.

 

그럼 static 변수와 extern 변수의 차이는 무엇일까요

 

 

1. 범위:

 

extern 변수는 다른 파일에서 전역변수를 참고할 때 사용하고, static 변수는 해당 파일 내에서만 접근하고 다른 파일에서 참조가 불가능 합니다.

 

 

2. 생명주기

 

extern 변수는 변수가 정의 된 파일에서 할당 된 메모리를 참조합니다. static 변수는 프로그램 실행 시점에 생성되고 종료 시 소멸됩니다.

 

 

 

 

 

nullptr과 NULL차이 - nullptr 조건문 사용시 주의사항

 

[C++] nullptr과 NULL차이 - nullptr 조건문 사용시 주의사항

NULL NULL은 C에서 주로 많이 사용하게 되는 값 입니다. 보통 0으로 정의되어 있습니다. 초기화 또는 문자열 끝을 표현하기 위해, 할당 된 값이 없음을 의미하고 싶을 때 보통 사용하게 됩니다. In C,

armin.tistory.com

const 의 개념 그리고 포인터 에서의 const

 

[C++] const 의 개념 그리고 포인터 에서의 const

안녕하세요 warehouse입니다. 오늘은 const 의 개념에 대해 알아 봤습니다. 그동안 아무 생각없이 const 는 그저 상수의 개념 정로도 이해하고 사용했었는데요 조금은 더 알고 써야하지 않을까 라는

armin.tistory.com