C プラグマ 新しいページはコチラ
提供: yonewiki
(→#pragma once) |
|||
| 1行: | 1行: | ||
| + | [[C PlusPlus#Cにもあった技術|C++]]へ戻る | ||
| + | |||
| + | |||
※このページではC言語にも存在していたという意味で記事タイトルがC プラグマになっていますが、<br /> | ※このページではC言語にも存在していたという意味で記事タイトルがC プラグマになっていますが、<br /> | ||
[[C PlusPlus|C++]]でも同様です。[[C PlusPlus|C++]]だけの機能がある場合は明記します。<br /> | [[C PlusPlus|C++]]でも同様です。[[C PlusPlus|C++]]だけの機能がある場合は明記します。<br /> | ||
| 221行: | 224行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | 但し、この方法は標準化されたものではないため、Microsoft Visual Studio C++ 4.0以上でしか動作しないと考えて扱っても良いのかもしれません。他のコンパイラでも動作するものもありますが、自分の環境に合わせてしまっても良いと思います。他の人に配るなら、 | ||
| + | |||
| + | <syntaxhighlight lang="cpp"> | ||
| + | FILE sample.h | ||
| + | #ifndef __SAMPLE.H__ | ||
| + | #define __SAMPLE.H__ | ||
| + | |||
| + | #if _MSC_VER > 1000 | ||
| + | #pragma once | ||
| + | #endif | ||
| + | ヘッダファイルプロトタイプ宣言 | ||
| + | |||
| + | #endif | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | のように記述すると良いと思います。インクルードガードによる手法をサポートしつつも、#pragma onceの機能も有効利用できます。コンパイル速度が#pragma onceの方が早いので、おすすめです。他のコンパイラでも速度が速くなるようにインクルードガードを実現するには、冗長インクルードガードと呼ばれる手法を使います | ||
| + | |||
| + | <syntaxhighlight lang="cpp"> | ||
| + | #ifndef __SAMPLE.H__ | ||
| + | #include "sample.h" | ||
| + | #endif | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | のようにしてインクルードガード下上でさらにインクルード分のところでも読み込むかどうかを判断する処理を加えます。インクルード部がかなり煩雑になりますが、2重に読み込むことをより早い段階で避けることが出来るので、コンパイル速度の向上が見込めます。 | ||
| + | |||
| + | |||
| + | [[C PlusPlus#Cにもあった技術|C++]]へ戻る | ||