ホームページ >バックエンド開発 >C++ >C コードに実装ファイル (.cpp) ではなく、ヘッダー ファイル (.h) のみを含める必要があるのはなぜですか?

C コードに実装ファイル (.cpp) ではなく、ヘッダー ファイル (.h) のみを含める必要があるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 18:01:11721ブラウズ

Why Should I Only Include Header Files (.h) and Not Implementation Files (.cpp) in My C   Code?

ヘッダーと実装ファイルのインクルードについて

C コードを使用する場合、ヘッダー ファイル (.h) のインクルードの違いを理解することが重要です。および実装ファイル (.cpp)。この区別は、コンパイル エラーを回避し、コード構成を維持するために重要です。

なぜヘッダー ファイルのみをインクルードするのですか?

ヘッダー ファイルの代わりに実装ファイル (.cpp) をインクルードしようとする場合ヘッダーファイル(.h)を編集すると、「関数が複数定義されている」などのコンパイルエラーが発生する場合があります。これは、ヘッダーには主に関数宣言とクラス仕様が含まれているのに対し、実装ファイルには実際の関数実装が含まれているためです。

実装ファイルを直接インクルードすると、関数のコードが複数のソース ファイルで複製されるため、関数が複数定義される可能性があります。プリプロセッサの仕事。この重複によりコンパイラが混乱し、エラーが発生します。

ヘッダーの組み込みの仕組み

ヘッダー ファイルを組み込むと、その内容が参照されるソース ファイルにコピーされます。次の例を考えてみましょう。

// main.cpp
#include "foop.h"

int main() {
  int x = 42;
  std::cout << x << std::endl;
  std::cout << foo(x) << std::endl;
}

プリプロセッサがこのコードを処理すると、main.cpp は次のようになります。

// iostream stuff

int foo(int a) {
  return ++a;
}

int main() {
  int x = 42;
  std::cout << x << std::endl;
  std::cout << foo(x) << std::endl;
}

ご覧のとおり、foo() の実装は次のようになります。 main.cpp に直接。ただし、foop.cpp という名前の実装ファイルに foo() の定義も含まれている場合、コンパイラーは重複した定義を検出し、エラーを発生させます。

以上がC コードに実装ファイル (.cpp) ではなく、ヘッダー ファイル (.h) のみを含める必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。