#pragma once
pragma 指令の概要:インデックス への移動
構文 (「疑似文法」を参照)
#pragma once
説明
#pragma once
は、ヘッダー ファイルが何度もインクルードされないようにするためのプリプロセッサ指令です。 #pragma once
指令がファイルに含まれていると、そのファイルは現在のプロジェクトに何度もインクルードされることはありません。
例
#pragma once
が役に立つ理由としては、たとえば、ファイルで別のヘッダーをインクルードするだけで十分だという事実が挙げられます。 この指令を使用できる論理的な例については、以下のコードを参照してください。
Vertex.h
#pragma once struct Vertex{ int x_coord; int y_coord; int z_coord; };
Triangle.h
#include "Vertex.h" struct Triangle{ Vertex p1; Vertex p2; Vertex p3; };
Square.h
struct Square{ Vertex v1; Vertex v2; Vertex v3; Vertex v4; };
Drawing.cpp
#include <vcl.h> #include "Triangle.h" #include "Vertex.h" int main() { //a triangle Triangle tr0; //a square Square sq0; return 0; }
Triangle.h でも Square.h でも 3 次元空間での位置を知るために Vertex 構造体が必要なため、どちらも Vertex.h をインクルードします。 Triangle.h と Square.h はどちらもメインの .cpp ファイル でインクルードされるため、この指令がなければ、Vertex.h ファイルは 2 回(Triangle.h と Square.h で 1 回ずつ)インクルードされることになります。 Vertex.h で #pragma once
を使用すると、プリプロセッサはこのファイルを 2 回目はインクルードできません。 その結果、エラーは出力されません。
メモ: これと同じことは
#ifndef/#define/#endif
でも実現できます。これは、二重インクルードの問題に対処するため ANSI 標準で採用されている方法です。