Ryukalice

インクルードガード #pragma once

2013-12-05

C++Builder 2010から、インクルードガード(ワンタイムインクルード)が、プリプロセッサ指令、つまり #pragma によりできるようになりました。今まで、以下のようにマクロを使っていたのが

#ifndef TSampleH
#define TSampleH

・・・

#endif

以下の1文で済むようになったということです。

#pragma once

これは素晴らしいです。テキストエディタの設定次第では、#ifndef がかかっている部分が全てシンタックス・ハイライトされたりしましたが、もう心配はありません。そう、#pragma once ならね。元々 Microsoft の VC++ 等ではできていたのですが、C++Builder でも2010以降ではできるようになったのです。

しかし、この喜びは簡単に踏み潰されてしまいます。C++Builder の場合、.cpp ファイルと .h ファイルの自動結び付け(ユニット化)を、インクルードガードのマクロ名称を使って行っているようなのです。つまり、従来のインクルードガードを用いなければ、逆に不便になるということです。プロジェクトファイル(.cbproj)を直接編集して、ユニット化させることもできますが、IDEが自動編集するファイルを手書きで弄るのは、どうも気が引けます。そして面倒臭いです。残念。