インクルードガード

提供: C++入門
移動: 案内検索
スポンサーリンク

インクルードガード (include guard)とは、C/C++のヘッダファイルのインクルードが2回目以降の展開を防ぐためのスキップするためにプロプロセッサに指示するテクニックです。#pragma onceの意味は、インクルードを一度だけ行う、という意味です。

読み方

インクルードガード
いんんくるーどがーど
include guard
いんんくるーどがーど

概要

プロプロセッサは、プロプロセッサディレクティブ include に遭遇するたびに、ヘッダファイルを展開しようとします。ヘッダAがヘッダBを、ヘッダBがヘッダAを互いにインクルードしているとしたら、どちらか一方をインクルードすると定義が二重に定義されます。インクルードガードは、そういった事態を防ぐものです。

ifndef/define を使用してインクルードガードを書くのが一般的でした。 C++では、プラグマ #pragma onceを使用して、インクルードガードを実現します。

インクルードガード

#pragma once

pragma(プラグマ)を使用したインクルードガードは、マイクロソフトの Visual Studio のコンパイラだけではありません。 注意事項として、以下のことがあげられます。

  • C/C++の標準仕様ではありません。
  • シンボリックリンクを正しくハンドリングできないコンパイラがあります。

従来型のインクルードガード

#ifndef HOGE_H
#define HOGE_H
class Hoge {
};
#endif // HOGE_H

関連項目




スポンサーリンク