c-lang:ヘッダーファイル
関数、プログラム、またはユーザーのグループが使用するテキストファイル。
システム定義制御情報またはユーザーデータを入れることができ、一般に宣言で構成される。
拡張子が「*.h 」である場合が多い。
インクルード #include
#include <ファイル名>
#include "ファイル名"
"" で囲まれていると、そのファイルの探索は、当のソースファイルがあった場所から始められるのが普通である。
そこにファイルがない場合、あるいは、ファイル名が<と>囲まれている場合には、そのファイルを捜すたのコンパイラごと規則にしたがって探索が行われる。
ソースファイルの先頭には、共通の #define 文や extern 宣言を取り込むため、あるいは<stdio.h>のようなヘッダに出ているライブラリ関数のための関数プロトタイプ宣言をアクセスするために 何行かの#include行があることが多い。
(厳密にいえば、これらはファイルである必要はない。ヘッダをどうアクセスするかは、コンパイラに依存する。)
#include は大きなプログラムで、宣言を結び付けるのに好まれるやり方である。
これを使えば、すべてのソースファイルに、同じ定義と変数宣言を入れることができるから、とくに悪質な種類の虫がまぎれこむ余地はなくなることが保証される。
取り込むべきファイルの内容を変更したときは、それを使うすべてのファイルは、もちろんコンパイルし直さなければならない。
ヘッダファイル
ヘッダファイルは、単にテキストファイルの挿入にすぎない。
そのヘッダファイルが機能するために、他のヘッダファイルが必要であれば、それはヘッダファイルの内容を表すコメントの箇所に必要なヘッダファイルを記述しておくこと。
ヘッダファイルをネストさせないようにするため、ヘッダファイルの先頭部分では、そのヘッダファイルが機能するためにはどのようなヘッダがインクルードされていなければならないか記述する。
ヘッダファイルはネストできる。
プライベートヘッダとパブリックヘッダ
ヘッダファイルには、インターフェースや、定数定義などを外部に公開するパブリックヘッダと、内部的に使用する関数定義などを定義するプライベートヘッダがに分けられる。 両者を明確に分けないと、ローカルな定数定義が衝突したり、分割コンパイルが正常に機能しない
ヘッダファイルに何を書くか
他のモジュールへのヘッダファイル群
公開してもよい型・列挙定数・マクロの定義
公開してもよい大域変数・関数の外部参照
などなど。
多重インクルード
二重にインクルードされてしまうことを防ぐために、例えば「example.h」ファイルの場合は、以下のように記述する。
code:cpp
/*
* マクロ「EXAMPLE_H」が定義されていないなら、本体を読み込む。
* マクロ「EXAMPLE_H」がすでに定義されているのなら、本体は読み込まない。
*/
#define EXAMPLE_H /* 「EXAMPLE_H」を定義 */ example.hファイル本体
インクルードガードともいうらしい。
インクルード ファイルを読もう!
Cプログラマは、文法を理解するだけでは不十分である。