2013-03-14 2 views
4

헤더 파일, 명령문 및 좋은 코딩 스타일에 관한 빠른 질문이 있습니다. 연결된 소스 및 헤더 파일과 함께 2 개의 클래스가 있고 main()이있는 최종 소스 파일이 있다고 가정합니다.헤더 파일 및 모범 사례 포함

Foo.hpp 내

나는이 다음 문 :

#include <string> 
#include <iostream> 
#include <exception> 

이제 Bar.hpp 나는 다음과 같은 진술 한 withing에 :

#include "Foo.hpp" 
#include <string> 

그리고 마침내 나는 다음과 같은 문장이 인 myprogram.cpp withing에를 :

#include "Bar.hpp" 
#include <string> 
#include <iostream> 
#include <exception> 

나는 포함 문이인 것을 안다. 0> Myprogram.cpp 및 Bar.hpp 프로그램에서 컴파일 및 기능 필요하지 않습니다 있지만 일을 가장 좋은 방법이나 올바른 방법은 무엇입니까? 각 파일에 필요한 헤더 파일을 명시 적으로 포함하지 않는 이유가 있습니까?

+0

"Foo.hpp"에서 문자열, 스트림 또는 예외를 사용합니까? –

답변

9

은 필요한 모든 파일을 모두 포함해야합니다. MyProgram.cppstring이 필요한 경우 Bar.hpp에 포함되지 않고 포함하십시오. 지금부터 2 주 후에도 Bar.hpp에 여전히 포함된다는 보장은 없으며 컴파일러 오류가 발생합니다.

필요합니다. 즉,이 필요합니다. 즉, 앞으로 선언하거나 완전히 제외해도 실제로 포함해야하는지 확인하십시오.

또한 일부 시스템 헤더에는 다른 헤더가 포함될 수 있습니다. 몇 가지 예외는 있지만 별도의 요구 사항은 없습니다. 따라서 <iostream><string>이 모두 필요한 경우 둘 중 하나만 사용하여 컴파일 할 수 있습니다.

포함하는 순서 (시스템에 vs 사용자 포함 포함)는 선택한 코딩 표준보다 일관성이 중요합니다.

+1

하지만 그 반대의 경우도 마찬가지입니다. 헤더 파일을 필요로하지 않는 한 헤더 파일을 포함하면 안됩니다 (즉, 포함하지 마십시오). –

+0

@LokiAstari 사실. –

+0

의미가 있습니다. 감사. – boulderprog

2

모든 파일에 필요한 것을 모두 포함 시키지만 불필요한 파일은 포함하지 마십시오.. 일반적으로, 그것은 포함 된 파일의 작업에 Foo.cpp하지 그것을, 그것은 등등 ... 예를 들어

Foo.cpp 필요로하지만,하지 Foo.h에 의해 경우, 프리 컴파일러 플래그를 사용하여, 두 번 포함되어 있지 않은지 확인 포함하는 것입니다 Foo.h. 두 가지 모두에 필요한 경우 두 가지 모두에 포함하십시오.

접두사로, using 지시문을 헤더 파일에 사용하지 않는 것이 좋습니다. 필요한 경우 구현 파일 (.cpp)에 using 지시문을 사용할 수 있습니다.