728x90
반응형
질문 : C ++에서 extern을 사용하는 경우
"Think in C ++"를 읽고 있는데 방금 extern
선언을 소개했습니다. 예를 들면 :
extern int x; extern float y;
나는 의미 (정의없는 선언)를 이해한다고 생각하지만 그것이 언제 유용하다고 증명되는지 궁금합니다.
누군가 예를 들어 줄 수 있습니까?
답변
이것은 전역 변수가있을 때 유용합니다. 헤더에 전역 변수의 존재 를 선언하여 헤더를 포함하는 각 소스 파일이 이에 대해 알지만 소스 파일 중 하나에서 한 번만 "정의"하면됩니다.
명확히하기 위해 extern int x;
x
int
유형의 객체가 어딘가에 존재 함을 컴파일러에 알립니다. 그것이 존재하는 위치를 아는 것은 컴파일러의 일이 아닙니다. 단지 타입과 이름 만 알고 있어야 사용 방법을 알 수 있습니다. 모든 소스 파일이 컴파일되면 링커는 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
#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(); }
#include <iostream> #include "header.h" void print_global_x() { //print global_x here: std::cout << global_x << std::endl; }
출처 : https://stackoverflow.com/questions/10422034/when-to-use-extern-in-c
728x90
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C ++에서 ifstream을 사용하여 한 줄씩 파일 읽기 (0) | 2021.06.09 |
---|---|
정적 std :: map 초기화<int, int> C ++에서 (0) | 2021.06.08 |
C ++에서 가상 함수가 필요한 이유 (0) | 2021.06.08 |
C ++ 여러 줄 문자열 리터럴 (0) | 2021.06.08 |
C ++에서 개인 정적 멤버를 초기화하는 방법 (0) | 2021.06.08 |