C プラグマ 新しいページはコチラ
提供: yonewiki
(→#pragma comment(linker, [” ”])) |
(→#pragma once) |
||
| 184行: | 184行: | ||
===#pragma once=== | ===#pragma once=== | ||
| + | #includeのようなソース読み込み指示によって、ソースファイルが重複してオープンされないように制御するためのプラグマです。プロジェクトに使われるヘッダファイルとメインソースコードファイルの全てに追加しておくべきプラグマです。以下のマクロと同等だと考えてよいです。 | ||
| + | |||
| + | <syntaxhighlight lang="cpp"> | ||
| + | FILE sample.h | ||
| + | #ifndef __SAMPLE.H__ | ||
| + | #define __SAMPLE.H__ | ||
| + | |||
| + | ヘッダファイルプロトタイプ宣言 | ||
| + | |||
| + | #endif | ||
| + | </syntaxhighlight> | ||
| + | 上記のようなマクロでは、インクルードガードと呼ばれる手法を使っていると呼ばれていて、一度ヘッダファイルを読み込むとファイル名ごとに決められたマクロ名が定義され、2回目にヘッダファイルが呼び出された時にはマクロが定義されているため、#ifndefの条件が成立せず、重複して読み込まれないようになります。 | ||
| + | |||
| + | |||
| + | 上記のようなインクルードガードを簡潔にするのが、#pragma onceです。処理系によってこのプラグマは使えないものもありますが、最近のコンパイラでは広く適用できるプラグマになっているので、汎用性が高まると思います。 | ||
| + | |||
| + | |||
| + | 上記マクロを以下のようにプラグマを使って、すっきりと記述できます。 | ||
| + | <syntaxhighlight lang="cpp"> | ||
| + | FILE sample.h | ||
| + | #pragma once | ||
| + | ヘッダファイルプロトタイプ宣言 | ||
| + | |||
| + | </syntaxhighlight> | ||