2012-03-30 3 views
1

.h 파일과 .c 파일에 포함을 수행하는 것의 차이점은 무엇입니까? 예를 들어, 클래스 A가있는 파일 a.h와 a.c가 있습니다. 클래스 B (b.h, b.c)에서 클래스 A를 사용합니다. 다음을 포함하는 것의 차이점은 무엇입니까? 012h를 포함하는 것의 차이점은 무엇입니까? b.h 대 b.c.사이의 차이점은 .h 파일과 .c 파일에 포함됩니다.

+0

.c 파일을 포함 할 수 없다 =) – karlphillip

+5

@karlphillip : 왜 안 되니? :) – sth

+0

나는 내가 그 질문을 잘못 이해했다고 생각한다. – karlphillip

답변

3

일반적으로 클래스 정의는 .h 파일에 있으며 구현은 .c (pp) 파일에 있습니다.

b.h 파일이 아니라 b.c 파일에서 #include "a.h"을 수행하는 한 가지 장점은 a.h가 변경 될 때마다 b.c뿐만 아니라 b.h를 포함하는 다른 파일도 다시 컴파일된다는 것입니다.

또한 B의 구현 세부 사항을 b.h를 사용하는 모든 사람에게 공개하는 것은 불필요한 일입니다. 그 아이디어는 b.h가 B 클래스를 사용하는 사람에게는 아무런 관심도없는 추가 정보를 포함하지 않아야한다는 것입니다 (비밀이 아니기 때문에가 아니라 사람들이 신경 쓰지 않기 때문에 걱정하지 않아도됩니다).

b.h를 포함하여 누구나 강제로 b.h를 포함하여 다른 .h 파일도 간접적으로 포함 할 필요가 없습니다. b.h에있는 내용을 사용하기 때문에 b.h에 #include되기 때문입니다. 혼란을 피하십시오.

가능한 경우 b.c의 #include "a.h"에 가장 좋습니다.

그러나 항상 가능한 것은 아닙니다. 만약 당신이 A를 b.c에서 사용하고 있고, b.h에 A에 대한 참조가 없다면, 괜찮습니다. 또한, BH 만하지만 '유형에 따라'참조 (즉, 구성원, 함수 인수 또는 반환 값으로), 당신은 또한 BH에 그냥 넣어 수에 대한 포인터를 포함하는 경우 : 여전히

class A; 

과에 #include "a.h"을 유지하여 기원전 그러나 a.h에 더 많은 참조 또는 의존성이 있다면, b.h를 포함한 모든 사람들은 실제로는 할 수 없다. 그러면 #include "a.h"은 b.h에 있어야한다.

2

.h 또는 .c 파일에 헤더 파일을 포함에 차이가 없습니다.
포함 된 파일의 내용은 포함 된 파일에 붙여 넣기됩니다.

+0

코드를 확장하는 경우에도 마찬가지지만 헤더가 자주 재사용 될 때 다른 헤더가 상당한 영향을 미치기 때문에 (컴파일시, 전역 네임 스페이스에서 이름을 가져 오는 중 ...) – KillianDS

+0

.h 파일을 포함하는 경우가 있습니다. .h 파일 대신 .c 파일을 사용하면 컴파일 시간이 단축됩니다. 나 자신이 작은 부분에 대해 작업하고 있기 때문에 실제 클래스 세부 정보는 너무 복잡하여 여기에 글을 쓸 수 없습니다. 그래서 개념적으로/컴파일러의 관점에서 컴파일 시간을 어떻게 바꿀지 궁금해하십니까? – Romonov

+0

위의 코멘트에 대한 답변이 작성되었습니다. 답해 주셔서 감사합니다. – Romonov

0

#include "a.h"a.h의 내용을 확장합니다.

#include "a.h"b.h 인 경우 편집 중에 a.hb.h에 복사됩니다.

#include "a.h"b.c에있는 경우 컴파일하는 동안 a.hb.c에 복사됩니다.

0

.H 파일은 이전

컴파일이 .c 또는 .H 파일의 상단에 넣어하지만이 .c 파일은 별도로 컴파일 당신이 당신의 헤더에 포함 지시어를 넣으면 실행 파일

1

를 만들기 위해 게터 링크를 파일, 해당 헤더 파일을 포함하는 다른 파일도 포함 된 헤더를 가져옵니다.

foo.h :

#include "dependency.h" 

bar.h이 경우

#include "foo.h" 

, bar.h가 foo.h 및 dependency.h 모두 갖는다.

0

당신은 .c 파일을 포함 할 수 있습니다 -하지만 규칙에 따라 당신은하지 않습니다.

.h 파일은 선언을위한 것입니다. 즉, .c 파일이 정의이고이 .h 파일이이를 수행 할 것입니다. 요리 책의 내용은 .h 파일과 같으며 .c 파일이 실제 조리법입니다.

관련 문제