.cpp ファイルを含める: 重複が発生しますか?
プログラミング コンテキストでは、ヘッダー ファイル (.h) とソース ファイル (.h) が使用されます。 cpp)は重要な役割を果たします。ヘッダー ファイルには関数とクラスの宣言が含まれており、他のモジュールがそれらと対話できるようになります。一般にヘッダー ファイルをインクルードすることが推奨されますが、代わりにソース ファイル (.cpp) を直接インクルードできますか?
答えは断然「ノー」です。 .cpp ファイルを含めると、複数の定義エラーが発生する可能性があります。その理由を理解するために、次のコードを調べてみましょう。
// main.cpp #include <iostream> #include "foop.h" int main() { int x = 42; std::cout << x << std::endl; std::cout << foo(x) << std::endl; return 0; }
// foop.h #ifndef FOOP_H #define FOOP_H int foo(int a); #endif
// foop.cpp int foo(int a) { return ++a; }
ヘッダー ファイルがインクルードされていると、コードは問題なくコンパイルされ、実行されます。ただし、ヘッダー ファイルではなくソース ファイル (.cpp) を誤ってインクルードしたとします。
// main.cpp #include <iostream> #include "foop.cpp" int main() { int x = 42; std::cout << x << std::endl; std::cout << foo(x) << std::endl; return 0; }
このシナリオでは、コンパイラーはエラーをスローします。
multiple definition of foo(int) first defined here
原因このエラーは?プリプロセッサにソース ファイル (.cpp) が含まれる場合、そのファイルの内容全体が現在のファイルにコピーされます。したがって、基本的に次のコードが生成されます。
// main.cpp #include <iostream> int foo(int a) { return ++a; } int main() { int x = 42; std::cout << x << std::endl; std::cout << foo(x) << std::endl; return 0; }
ご覧のとおり、関数 foo() が同じファイル内で 2 回定義されており、複数定義エラーが発生しています。この問題を回避するには、ソース ファイル (.cpp) の代わりにヘッダー ファイル (.h) をインクルードすることが重要です。ヘッダー ファイルは、実装なしで関数とクラスを宣言するため、重複が防止され、プログラム全体で各関数の定義が 1 つだけ存在することが保証されます。
以上が.h ファイルではなく .cpp ファイルを含めることを避けるべき理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。