インクルード ガードは、ヘッダー ファイルの相互再帰的インクルードを防ぐのに効果的です。 #include ディレクティブを処理するとき、プリプロセッサはヘッダーの内容を解析する前に既存のマクロ定義をチェックします。マクロがすでに定義されている場合は、ヘッダーの内容をスキップし、再帰を効果的に防止します。
相互包含とは対照的に、インクルード ガードは複数のシンボル定義を防ぐように設計されていません。ヘッダーが複数の変換単位 (個別の .cpp ファイル) に含まれている場合、シンボル定義は各単位で複製されます。これは、C の One Definition Rule の違反によるリンカー エラーにつながる可能性があります。ヘッダー ファイルでクラスまたはデータ構造を宣言し、相互に依存しない依存関係を可能にします。 inclusion.
複数の定義:インクルードされるヘッダー ファイルで定義された関数またはグローバル変数には inline キーワードを使用します複数の翻訳単位で。コンパイラは、複数のシンボル定義を回避して、呼び出しサイトで関数をインライン化しようとします。
内部リンケージ:以上がインクルード ガードを使用しているにもかかわらず、ヘッダー ファイルで複数の定義エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。