C ++에서 extern을 사용하는 경우 extern선언을 도입했습니다 . 예를 들면 다음과 같습니다. extern

“Think in C ++”을 읽고 extern선언을 도입했습니다 . 예를 들면 다음과 같습니다.

extern int x;
extern float y;

나는 의미 (정의없는 선언)를 이해한다고 생각하지만 그것이 언제 유용한 지 궁금합니다.

누군가가 모범을 보일 수 있습니까?



답변

전역 변수가있을 때 유용합니다. 헤더에 전역 변수 의 존재 를 선언하여 헤더를 포함하는 각 소스 파일에 대해 알 수 있지만 소스 파일 중 하나에서 한 번만 “정의”하면됩니다.

명확히하기 위해를 사용 extern int x;하면 컴파일러에게 int라는 유형의 객체 x어딘가에 있다고 알립니다 . 존재하는 위치를 아는 것은 컴파일러 작업이 아니며, 유형과 이름 만 알고 있으면 사용 방법을 알 수 있습니다. 모든 소스 파일이 컴파일되면 링커는 x컴파일 된 소스 파일 중 하나에서 찾은 하나의 정의에 대한 모든 참조를 분석 합니다. x변수가 작동하려면 변수 정의에 “외부 링크”가 있어야합니다. 이는 기본적으로 함수 외부 (일반적으로 “파일 범위”라고 함) 외부에서 static키워드 없이 선언해야 함을 의미합니다 .

헤더:

#ifndef HEADER_H
#define HEADER_H

// any source file that includes this will be able to use "global_x"
extern int global_x;

void print_global_x();

#endif

소스 1 :

#include "header.h"

// since global_x still needs to be defined somewhere,
// we define it (for example) in this source file
int global_x;

int main()
{
    //set global_x here:
    global_x = 5;

    print_global_x();
}

소스 2 :

#include <iostream>
#include "header.h"

void print_global_x()
{
    //print global_x here:
    std::cout << global_x << std::endl;
}

답변

몇 개의 모듈간에 변수를 공유 할 때 유용합니다. 한 모듈에서 정의하고 다른 모듈에서 extern을 사용하십시오.

예를 들면 다음과 같습니다.

file1.cpp에서 :

int global_int = 1;

file2.cpp에서 :

extern int global_int;
//in some function
cout << "global_int = " << global_int;

답변

그것은 모두 연계 에 관한 것 입니다.

이전 답변은에 대한 좋은 설명을 제공했습니다 extern.

그러나 중요한 점을 추가하고 싶습니다.

당신은에 대해 질문 extern에서 C ++ 하지에 C 때 사건에 대해 언급 아무 대답이없는 이유를 모르겠어요 extern함께 제공 const++ C이다.

C ++에서 const변수는 기본적으로 내부 링크가 있습니다 (C와 같지 않음).

따라서이 시나리오는 연결 오류가 발생합니다 .

출처 1 :

const int global = 255; //wrong way to make a definition of global const variable in C++

출처 2 :

extern const int global; //declaration

다음과 같아야합니다.

출처 1 :

extern const int global = 255; //a definition of global const variable in C++

출처 2 :

extern const int global; //declaration

답변

전역 변수를 원할 때 유용합니다. 일부 소스 파일에서 전역 변수를 정의하고 해당 헤더 파일을 포함하는 모든 파일이 동일한 전역 변수를 볼 수 있도록 헤더 파일에서 extern을 선언합니다.