コンピュータプログラミングにおいて、プレフィックスヘッダーとは、一部のCまたはC++コンパイラに見られる機能で、特定のコードスニペットがすべてのファイルの先頭に挿入されるようにするために使用されます。
C言語およびC++言語において、ヘッダーファイルとは、コンパイラによって別のソースファイルに組み込まれるファイルのことです。通常、ソースファイルの先頭にコンパイラディレクティブを記述することで組み込まれます。プレフィックスヘッダーは、通常のヘッダーファイルとは異なり、コンパイラディレクティブを記述することなく、すべてのソースファイルの先頭に自動的に組み込まれます。
プレフィックス ヘッダーは通常、コンパイル時間を短縮するためにプリコンパイルされます。この目的以外でプレフィックス ヘッダーを使用すると、コードの保守が難しくなり、再利用性が低下します。 [ 1 ] プレフィックス ヘッダーは、クロス プラットフォーム サポートにも使用できます。*NIXシステムでは、システムの機能を記述する config.h ヘッダー ファイルを生成することが一般的です ( autoconfなどを使用)。ただし、Visual Studio や Xcode などの特定のビルド システムを使用する場合、この config.h は利用できない場合があります。これを解決する 1 つの手法は、ビルド システムで HAVE_CONFIG_H を事前定義されたマクロにして config.h を生成することです。これにより、コードは #include config.h が必要かどうかを知ることができます (また、config.h がないビルド システムでも安全に使用できます)。別の方法として、ビルド システムが HAVE_CONFIG_H を定義する代わりに、config.h をプレフィックス ヘッダーとして追加することもできます。もちろん、このヘッダーは明示的にインクルードするコンパイル ユニットだけでなく、すべてのコンパイル ユニットに追加されるという欠点があります。
macOSでは、Xcodeビルドシステムが新規プロジェクトに対してプレフィックス ヘッダーを自動的に生成します。たとえば、新しいCocoaプロジェクトでは、次のようなプレフィックス ヘッダーが生成されます。
#ifdef __OBJC__ #import <Cocoa/Cocoa.h> #endifその結果、Objective-C のディレクティブ、あるいはより一般的にはインクルードガードの使用により、 Objective-Cコードファイル内の上記のヘッダーファイルの明示的なインクルードは、2 回目のインクルードを意味しません。したがって、これらのインクルードは省略できますが、ソースコードの自律性と再利用性を維持し、ライブラリの依存関係を明確にするために、明示的に記述することが推奨されています[ 1 ]。#import#include
他の種類のプロジェクトについても、同様のプレフィックスヘッダーが生成されます。