ホームページ > バックエンド開発 > C++ > インクルード ガードを使用しているにもかかわらず、ヘッダー ファイルで複数の定義エラーが発生するのはなぜですか?

インクルード ガードを使用しているにもかかわらず、ヘッダー ファイルで複数の定義エラーが発生するのはなぜですか?

DDD
リリース: 2025-01-01 11:11:09
オリジナル
296 人が閲覧しました

Why Are My Header Files Still Causing Multiple Definition Errors Despite Using Include Guards?

コードがインクルード ガードで保護されないのはなぜですか?

再帰的インクルージョン

インクルード ガードは、ヘッダー ファイルの相互再帰的インクルードを防ぐのに効果的です。 #include ディレクティブを処理するとき、プリプロセッサはヘッダーの内容を解析する前に既存のマクロ定義をチェックします。マクロがすでに定義されている場合は、ヘッダーの内容をスキップし、再帰を効果的に防止します。

複数の定義

相互包含とは対照的に、インクルード ガードは複数のシンボル定義を防ぐように設計されていません。ヘッダーが複数の変換単位 (個別の .cpp ファイル) に含まれている場合、シンボル定義は各単位で複製されます。これは、C の One Definition Rule の違反によるリンカー エラーにつながる可能性があります。ヘッダー ファイルでクラスまたはデータ構造を宣言し、相互に依存しない依存関係を可能にします。 inclusion.

複数の定義:


インライン:

インクルードされるヘッダー ファイルで定義された関数またはグローバル変数には inline キーワードを使用します複数の翻訳単位で。コンパイラは、複数のシンボル定義を回避して、呼び出しサイトで関数をインライン化しようとします。

内部リンケージ:
    静的または名前のない名前空間を使用してシンボルに内部リンケージを与え、シンボルの可視性を現在のものに制限します。翻訳単位。これは、実行可能ファイルのサイズが大きくなる可能性があるため、インラインよりも望ましくありません。

以上がインクルード ガードを使用しているにもかかわらず、ヘッダー ファイルで複数の定義エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート