.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 サイトの他の関連記事を参照してください。