헤더 파일과 라이브러리의 차이점은 무엇입니까? 특히 헤더와 라이브러리가 계속 섞여 있습니다.

내가 이해하기 어려운 것 중 하나는 컴파일러가 작동하는 방식입니다. 나는 많은 어려움을 겪고 있지만 특히 헤더와 라이브러리가 계속 섞여 있습니다. 누군가 일을 조금 정리할 수 있다면 좋을 것입니다.



답변

둘 다 이렇게 생각하십시오 (면책 조항 : 이것은 매우 높은 수준의 비유입니다;) ..

  • 헤더는 동안, 당신이 호출 할 수있는 전화 번호는 …
  • 도서관 은 거기에 도달 할 수있는 실제 사람입니다!

“인터페이스”와 “구현”의 근본적인 차이점입니다. 인터페이스 (헤더)을 설명 하는 방법 그동안, (그것이 어떻게 작동하는지 모른 채) 일부 기능을 호출하는 구현 (라이브러리) 실제 기능입니다.

참고 :이 개념은 유연성을 허용하기 때문에 매우 기본적입니다. 다른 라이브러리에 대해 동일한 헤더를 가질 수 있으며 (즉, 기능이 정확히 동일한 방식으로 호출 됨) 각 라이브러리는 다른 방식으로 기능을 구현할 수 있습니다 . 동일한 인터페이스를 유지함으로써, 당신은 변경하지 않고 라이브러리를 대체 할 수있는 당신의 코드를.

그리고 : 호출 코드를 깨지 않고 라이브러리 구현을 변경할 수 있습니다!


답변

헤더 파일 이다 일반적으로 애플리케이션 인터페이스 내에서의 계면 또는 세트를 정의하는데 사용된다. 헤더 파일은 기술적 구현 세부 사항을 생략하면서 프로그램의 외부 기능을 보여주는 것으로 생각하십시오.

예를 들어 프로그램을 최적화하는 경우 알고리즘을 개선하기 위해 소스 (.cpp) 파일을 수정할 가능성이 높지만 헤더 파일은 변경되지 않을 것입니다. 외부 클라이언트가 여전히 동일한 매개 변수 세트를 사용하여 메소드를 호출하기 때문입니다. 반환 값.

C ++와 같은 객체 지향 언어에서 헤더 파일에는 일반적으로 다음이 포함됩니다.

  • 클래스 설명 및 상속 계층
  • 클래스 데이터 멤버 및 유형
  • 수업 방법

헤더 파일에서 코드가 구현되는 것을 막을 수는 없지만 코드에 추가 결합 및 종속성을 도입 할 수 있으므로 일반적으로 선호되지 않습니다.

일부 경우 (예 : 템플릿 클래스) 구현 기술적 인 이유로 헤더 파일에 정의 되어야합니다 .


라이브러리는 당신이 프로그램 또는 프로그램의 그룹에 사용할 수 있도록 할 코드의 모음입니다. 그것은 구현을 포함합니다 특정 인터페이스 또는 인터페이스 집합의 됩니다.

코드는 코드 중복을 방지하고 재사용을 장려하기 위해 라이브러리에 정의되어 있습니다. 라이브러리는 정적으로 링크 (.lib)하거나 동적으로 링크 (.dll) 할 수 있습니다.

  • 정적으로 링크 라이브러리는 빌드 프로세스의 링크 단계에서 최종 실행 파일 (.exe)로 연결되어 있습니다 (메소드 정의로 생각할 수있다) 수출 기호의 집합을 정의합니다. 더 큰 바이너리를 희생시키면서 실행 시간이 더 빠르다는 장점이 있습니다 (라이브러리가 동적으로로드 될 필요가 없기 때문에) (메소드가 기본적으로 실행 파일에 복제되기 때문입니다).

  • 동적 링크 라이브러리는 프로그램의 실행보다는 프로그램의 연결시 연결되어 있습니다. 여러 프로그램이 동일한 방법을 재사용해야 할 때 유용하며 COM과 같은 기술에서 광범위하게 사용됩니다.


답변

혼란 스러울 수있는 한 가지는 라이브러리 라는 단어가 C ++에서 가 여러 의미를 가질 수 있다는 것입니다. 여기에서 한 가지 의미가 잘 논의되었습니다.

이진 파일의 링크 가능한 함수 세트입니다. 이들은 정적으로 연결되거나 동적으로 연결될 수 있습니다.

그러나 또 다른 유형의 라이브러리가 있습니다. 소위 헤더 전용 라이브러리 (STL, TR1 및 Boost의 일부 포함)입니다. 이들은 별도의 바이너리 형식으로 존재하지 않으므로 단어 라이브러리 는 특정 바이너리 파일이 아니라 포함 된 헤더 파일 집합을 참조합니다.

도움이 되었기를 바랍니다.


답변

라이브러리는 일련의 개체 파일로 컴파일 된 코드입니다. 개체 파일에는 컴파일 된 기계 코드와 코드에서 사용되는 데이터 선언이 포함됩니다.

헤더 파일은 라이브러리에 대한 인터페이스 를 정의 합니다. 라이브러리를 올바르게 사용하는 방법을 알려줍니다. C / C ++에서 헤더 파일은 함수 이름 목록과 해당 함수를 호출하는 방법을 제공합니다. 사용하는 매개 변수의 수와 유형, 반환 유형, 호출 규칙 등 헤더 파일에는 다른 많은 항목이 있습니다. 하지만 결국 결론은 라이브러리 코드를 호출하기위한 일련의 규칙입니다.


답변

헤더에는 선언 만 포함되는 반면 라이브러리에는 구현도 포함됩니다.


답변

프로그래밍 언어의 라이브러리가 일반 라이브러리 인 경우 라이브러리에있는 많은 책을 언어의 함수 / 방법과 비교할 수 있습니다. 또한 헤더 파일은 책의 행 번호와 비교할 수 있습니다. 하이데라바드의 일부 도서관에 책이 있고 그 도서관에 해당 책이 행 번호 24에 있다고 가정합니다. 도서관 주소가 주어진 것과 같은 방식으로 std (표준 라이브러리 용) 네임 스페이스를 사용하여 동일한 시간의 모든 책 (이 경우 메서드) (입 / 출력 스트림과 관련된 모든 메서드)이 들어있는 헤더 파일에 행 No가 지정됩니다.


답변

헤더는 일반적으로 프로토 타입을 포함하는 데 사용됩니다. 헤더는 사전 처리 시간에 확장되므로 컴파일 시간에 코드가 관련 함수 선언 / 프로토 타입에 액세스 할 수 있습니다.

라이브러리는 함수 프로토 타입 (헤더에 있음)의 정의를 포함하는 실제 소프트웨어입니다. 링크 타임에 라이브러리가 사용됩니다. 정의 (라이브러리에 있음)는 링크 타임에 해결됩니다.