2010-11-19 3 views
1

inclusions.h이라는 헤더 파일에 내 프로젝트에 대해 모두 #include <...>이 있다고 가정 해 봅니다. inclusions.h에는 settings.h이라는 다른 헤더 파일이 있으며 여기에서 다양한 상수를 수정할 수 있습니다.헤더 파일의 상호 포함

inclusions.h 인 경우 settings.h도 수학 라이브러리에 액세스 할 수 있습니까? 또는 #include <math.h>settings.h에도 넣어야합니까?

+1

시도해 보셨습니까? 어떻게 된 거예요? –

+0

마이크로 칩 칩을 위해 C로 프로그래밍 할 때 기본적으로 약간의 부가 메모가있어서 HardwareProfile.h 헤더에 대해 제안하는 것을 자동으로 수행합니다. 그들은 '표준'헤더를로드하여 설정에 필요한 적절한 헤더를 포함하도록 수정합니다. 때로는 이와 같은 일이 대규모 조직의 '표준'을 유지하기 위해 수행됩니다. 일명, xyz를 사용하려면이 전문 헤더를 포함 시키십시오. 그러나 xzy를 수행해야하는 경우이 헤더를 포함하십시오. 개인적으로 ... 필요한 모든 헤더를 포함하여 내가하는 방식입니다. – g19fanatic

답변

5

settings.h 앞에 math.h가 포함되어 있으면 settings.h도 math.h에 액세스해야합니다. 하지만 액세스를 보장하고 (의존성을 나타 내기 위해) math.h와 같이 필요한 곳에 파일을 포함시켜야합니다.

+0

아, 그건 의미가 있습니다. 하지만 라이브러리를 두 번 이상 포함하는 것은 나쁜 습관이 아닙니까? – Maxpm

+1

@Maxpm 아니요. –

+1

아니요, 확실히 나쁜 습관이 아닙니다. 반대로, 중앙 헤더 파일을 사용하는 모든 다른 헤더 내의 모든 가능한 헤더를 포함하는 것은 나쁜 습관입니다. 헤더가 필요하고 더 이상 필요하지 않은 곳에 포함 시키십시오. 그러나 필요한 경우 여러 번 헤더를 포함하십시오. 포함 경비원은 어쨌든 이중 선언을 방지합니다. – Flinsch

3

흠집의 순서에 따라 다릅니다. #include은 텍스트 대체로 작동하는 사전 처리기 지시문입니다. 그래서 경우는 inclusions.h에, 당신은 :

#include <math.h> 
#include <settings.h> 

설정이 수학을 "볼 수 있습니다." 가지고있는 경우 :

#include <settings.h> 
#include <math.h> 

수 없습니다. 그러나 : settings.h 다른 곳에서 을 사용하지 않고없이 math.h을 포함하면 어떤 일이 발생합니까? 결국 각 파일을 독립적으로 포함 시키십시오.

1

이 경우 다른 사람이 지적한대로 포함 순서에 따라 액세스 할 수 있습니다. 이는 해당 소스 파일이 하나의 번역 단위 (원본 + 본질적으로 포함)의 일부이기 때문에 이 "settings.h" 앞에 오면 그 파일을 볼 수 있습니다. 그러나 설정이 다른 번역 단위의 일부가되거나 특정 이동을 결정한 경우 변경 될 수 있습니다. "안전"하려면 파일에 필요한 헤더 파일을 포함시켜야합니다.