ヘッダファイルとライブラリの違いは何ですか?

両方を次のように考えてください (免責事項:これは非常に高度な類推です;) ..

  • ヘッダー は電話番号ですが、...
  • ...図書館 あなたがそこに到達できる実際の人です!

これが「インターフェース」と「実装」の根本的な違いです。 インターフェース (ヘッダー) 方法を説明します 実装しながら、(どのように機能するかを知らずに)いくつかの機能を呼び出す (ライブラリ) は実際の機能です。

注:この概念は非常に基本的なものです。これにより、柔軟性が得られます。異なるライブラリに対して同じヘッダーを使用でき (つまり、機能はまったく同じ方法で呼び出されます)、各ライブラリは 実装 することができます。 機能を別の方法で。同じインターフェースを維持することで、 お使いの を変更せずにライブラリを置き換えることができます コード。

そして:呼び出しコードを壊さずにライブラリの実装を変更できます!


ヘッダー ファイル 一般的に アプリケーション内でインターフェースまたはインターフェースのセットを定義するために使用されます。ヘッダー ファイルは、技術的な実装の詳細を省略しながら、プログラムの外部機能を示すものと考えてください。

たとえば、プログラムを最適化する場合、アルゴリズムを改善するためにソース (.cpp) ファイルを変更する可能性が高くなりますが、ヘッダー ファイルは変更されません。値を返します。

C++ のようなオブジェクト指向言語では、通常、ヘッダー ファイルに次のものが含まれます。

  • クラスの説明と継承階層
  • クラス データのメンバーと型
  • クラス メソッド

コードがヘッダー ファイルに実装されるのを止めるものは何もありませんが、これはコードに余分な結合と依存関係を導入する可能性があるため、一般的には好まれません。

場合によっては (テンプレート化されたクラスなど)、実装は しなければならない 技術的な理由により、ヘッダー ファイルで定義されていません。

図書館 プログラムまたはプログラムのグループで使用できるようにするコードのコレクションです。 実装が含まれます 特定のインターフェースの またはインターフェイスのセット。

コードはライブラリで定義され、コードの重複を防ぎ、再利用を促進します。ライブラリは静的にリンクできます (.lib) または 動的リンク (.dll):

    <リ>

    静的にリンクされた ライブラリは、ビルド プロセスのリンク段階で最終的な実行可能ファイル (.exe) にリンクされる一連のエクスポート シンボル (メソッド定義と考えることができます) を定義します。これには、バイナリが大きくなるという犠牲を払って (ライブラリを動的にロードする必要がないため)、実行時間が短縮されるという利点があります (メソッドは本質的に実行可能ファイルに複製されるため)。

    <リ>

    動的にリンクされた ライブラリは、プログラムのリンクではなく、プログラムの実行中にリンクされます。複数のプログラムが同じメソッドを再利用する必要がある場合に便利で、COM などのテクノロジで広く使用されています。


混乱を招くかもしれないことの 1 つは、library という言葉です。 C++ ではいくつかの意味を持つことができます。 1 つの意味がここでよく議論されています:

バイナリ ファイル内のリンク可能な一連の関数。これらは、静的にリンクすることも、動的にリンクすることもできます。

ただし、別の種類のライブラリがあります。いわゆるヘッダーのみのライブラリ (STL、TR1、Boost の一部を含む) です。これらは別個のバイナリ形式で存在しないため、単語 library 特定のバイナリ ファイルを参照するのではなく、インクルードされたヘッダー ファイルのセットを参照します。

これがお役に立てば幸いです。