2014-05-17 6 views
1

내가 아는 한 extern 키워드는 여러 파일 내에서 사용해야하는 전역 변수를 선언하는 데 사용됩니다. 일반적으로 extern 키워드는 헤더 파일에 정의되어 많은 .cpp 또는 헤더 파일에서 다시 사용됩니다.헤더 파일이 아닌 .cpp에서 declare extern 변수를 사용하는 것은 무엇입니까?

어제 나는, 저자 는 통화 당에 통근 변수를 선언하고 MAIN.CPP

d.cpp

extern int whatever; //yes, it is declared in .cpp but not .h 

MAIN.CPP의 변수를 정의 우리의 코드베이스에 특별한 (?) 사용을 보았다

#include "d.hpp" 

int whatever = 100; 

int main() 
{ 
    //do something 
} 

.cpp에서는 extern 변수를 선언하지만 .h가 아닌 extern 변수를 선언 할 때의 이점과 단점은 무엇입니까? 이전에는 이와 같은 기술을 사용하지 않았으며 google에서 예제를 찾을 수 없습니다.

+0

이 게시물을 폐쇄해야한다고 생각하는 사람이 무엇인지 모릅니다. – StereoMatching

답변

4

의미가 없습니다. d.cpp가이 extern 변수를 필요로한다면, 헤더 파일을 포함시켜야합니다. 어떤 이유로 든 주 저자가 "무엇이든지" "int 무엇이든지"라고하는 것이 더 나은 이유가 무엇이든간에 결정하기가 힘들다면 링커 오류를 찾기가 어려울 것입니다. 주 저자가 "char any"로 변경하면 d.cpp가 "extern int"라고 생각하는 것에 글을 쓸 때마다 그것은 약간의 메모리를 덮어 쓰게 될 것이고 아마도 버그를 찾기가 아주 어려울 것입니다.

+1

+1 미래의 변화는 간과하기 쉬운 중요한 포인트입니다. –

+0

"whatever"에서 "whatsoever"로 이름을 바꾸면 링커 오류를 찾기가 어려울 수 있습니다. – StereoMatching

0

extern은 다른 곳에서을 정의 외부 링크으로이름를 선언 에 사용하고있는 것입니다. 헤더 또는 .cpp 파일에 extern이 선언되었는지 여부는 중요하지 않습니다. AFAIK .cpp 파일에서 선언 할 때 특별한 단점이나 이점이 없습니다. 그러나 다른 사람들이 지적한 것처럼 선언은 헤더 파일에 있어야하며 소스 파일의 정의는 헤더를 포함해야합니다. extern을 사용하면 발견하기 어려운 미묘한 버그가 발생할 수 있습니다.