More C++ Idioms/インクルードガードマクロ(Include Guard Macro)

出典: フリー教科書『ウィキブックス(Wikibooks)』
移動: 案内, 検索

目次

[編集]

インクルードガードマクロ(Include Guard Macro)

[編集] 意図

複数回ヘッダファイルをインクルードすることを防止する。

[編集] 別名

[編集] 動機

同一のヘッダファイルを同じ翻訳単位にインクルードすることは問題となる。 なぜなら、C++ の基本規則である単一定義規則(One Definition Rule(ODR))に違反するからである。 ヘッダファイルは直接あるいは間接的なインクルードによって複数回インクルードされるかもしれない。

[編集] 解法とサンプルコード

インクルードガードマクロ(Include Guard Macro)イディオムは C でも適用可能な古いイディオムである。 ある翻訳単位で複数回ヘッダファイルをインクルードすることを防ぐために、単純な #define を使う。 以下のようなマクロを、ヘッダファイルの先頭と末尾に置く(訳註:__ で開始する名前は実装に予約されている)。

#ifndef __MYHEADER_H // 先頭
#define __MYHEADER_H 
...
#endif // __MYHEADER_H // 末尾

コンパイラによっては

#pragma once

を、インクルードガードの効率的な代替手段としてサポートしている場合がある。 伝統的なインクルードガードマクロとは異なり、2 回以上ヘッダファイルを開く必要がない。

[編集] 既知の利用

事実上、世界中の全てのヘッダファイル!

[編集] 関連するイディオム

個人用ツール
名前空間

変種
操作
ナビゲーション
ヘルプ
印刷/エクスポート
ツールボックス
他の言語