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

C で実装 (.cpp) ファイルの代わりにヘッダー (.h) ファイルをインクルードする必要があるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-26 01:06:12504ブラウズ

Why Should I Include Header (.h) Files Instead of Implementation (.cpp) Files in C  ?

.cpp ファイルのインクルード: 関数重複のケース

C で開発する場合、一般にヘッダー (.h) をインクルードすることをお勧めします。実装 (.cpp) ファイルではなく、機能に関するファイル。 .cpp ファイルを含めると、関数の重複によりエラーが発生する可能性があります。

次のコード例を考えてみましょう:

// main.cpp
#include <iostream>
#include "foop.h" // Header file containing the function declaration

int main() {
  std::cout << foo(42) << std::endl;
  return 0;
}

// foop.h
int foo(int a); // Function declaration

// foop.cpp
int foo(int a) { // Function definition
  return ++a;
}

ヘッダー ファイル (.h) が存在するため、このコードは正しくコンパイルされ、実行されます。 foo() 関数の宣言のみが含まれており、定義は別の .cpp ファイルで提供されます。

ただし、ヘッダー ファイルを置き換えると、 .cpp ファイルを含む main.cpp へのインクルード:

// main.cpp
#include <iostream>
#include "foop.cpp" // Implementation file containing the function definition

これはコンパイラ エラーになります:

multiple definition of foo(int)
first defined here

これは、プリプロセッサがインクルードされたファイルの内容をコピーするためです。メインソースファイルに。 .cpp ファイルをインクルードすると、foo() 関数定義が main.cpp に効果的にコピーされ、その結果、関数の定義が重複します。

関数の重複を避けるために、ヘッダー (.h) ファイルをインクルードすることをお勧めします。宣言と定義の .cpp ファイルのみ。これにより、関数がプログラム内で 1 回だけ定義されるようになります。

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

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