ヘッダファイルとは? わかりやすく解説

Weblio 辞書 > 固有名詞の種類 > 製品 > コンピュータ > プログラミング言語 > C++ > ヘッダファイルの意味・解説 

ヘッダファイル

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/24 07:53 UTC 版)

ナビゲーションに移動 検索に移動

ヘッダファイル: Header file)は、特にC言語C++でのプログラミングで使われるファイルであり、一般にソースコード形式をしていて、コンパイラが別のソースファイルの一部として自動的に展開して使用する。一般にヘッダファイルは、ソースファイルの先頭部分に書かれたディレクティブによってインクルード(その場に内容を展開)される。インクルードファイル: Include file)とも。

ヘッダファイルには、サブルーチン変数やその他の識別子前方宣言が含まれていることが多い。複数のソースファイルで宣言する必要のある識別子を1つのヘッダファイルに置き、必要に応じて個々のソースファイルがそのヘッダファイルをインクルードする。

C言語C++では、標準ライブラリ関数はヘッダで宣言されている(ただし、規格上ヘッダは必ずしもファイルであるとは限らない[1])。詳しくは、標準Cライブラリ標準C++ライブラリを参照されたい。

背景

最近の多くのプログラミング言語では、プログラムサブルーチンなどの小さなコンポーネントに分割されており、各サブルーチンは複数の物理的に分割されたファイルに配置され、個々にコンパイルされる。あるサブルーチンがそのファイル以外で定義された何かを使う場合、前方宣言関数プロトタイプといった概念を導入する必要が生じる。例えば、あるソースファイルに次のように関数が定義されるとする。

int add(int a, int b)
{
    return a + b;
}

この関数を別のソースファイルで参照するには、関数プロトタイプで宣言する必要がある。従って、次のようになる。

extern int add(int, int);

int triple(int x)
{
    return add(x, add(x, x));
}

しかし、この単純な手法ではプログラマが add という関数の宣言を二箇所で管理しなければならなくなる。すなわち、実装が書かれたファイルとそれを使っているファイルである。その関数の定義が変更された場合、プログラマはプログラムのあちこちにある関数プロトタイプも全て更新しなければならない。

ヘッダファイルはこの問題を解決するものである。モジュール化されたヘッダファイルでは、そのモジュールが外部に公開する個々の関数、オブジェクト、データ型などの宣言をする。例えば、上記の例ではヘッダファイルには add の宣言が含まれるだろう。add を使っている各ソースファイルでは、そのヘッダファイルを #include ディレクティブを使って導入する。

#ifndef H_ADD
#define H_ADD

extern int add(int, int);

#endif
#include "add.h"

int triple(int x)
{
    return add(x, add(x, x));
}

これにより保守の負担が低減される。定義が変更された場合、ヘッダファイルにある宣言だけを更新すれば済む(変更内容によってはそれだけでは済まないこともある)。ヘッダファイルは、その中で宣言されたものの実体が定義されているソースファイルにもインクルードされることがある。これにより、コンパイラが定義と宣言が一貫しているかをチェックできる。

#include "add.h"

int add(int a, int b)
{
    return a + b;
}

一般にヘッダファイルはインタフェースだけを提示するのに使われ、そこで宣言されたコンポーネントの使い方をある程度解説する文書を(コメントなどで)含んでいることが多い。上記の例では、サブルーチンの実装は別のソースファイルにあり、個別にコンパイルされる。C言語やC++における例外としてインライン関数がある。多くの実装ではインライン関数の展開はコンパイル時にその定義がないとできない実装になっていることが多いためである。

代替手法

ヘッダファイル以外にも、他のファイルで定義された識別子の宣言にアクセスする方法はある。ヘッダファイルの場合、実装しているファイルと宣言しているヘッダファイルの2ヶ所の更新を同期させる必要がある。

ヘッダーファイルという方法を用いないプログラミング言語もある。Javaなどの言語では、パッケージにより、コンパイラが把握できるようにしている。モジュールという名称で、同様の機能を有する言語もある。C++においても、モジュールの仕組みが提案されている[2]

脚注

[脚注の使い方]
  1. ^ C11 standard, 7.1.2 Standard headers, p. 181, footnote 182: "A header is not necessarily a source file, nor are the < and > delimited sequences in header names necessarily valid source file names.
  2. ^ A Module System for C++ (Revision 4) (PDF)” (英語). JTC1/SC22/WG21 - The C++ Standards Committee (2016年2月15日). 2016年6月5日閲覧。

関連項目

外部リンク





固有名詞の分類

このページでは「ウィキペディア」からヘッダファイルを検索した結果を表示しています。
Weblioに収録されているすべての辞書からヘッダファイルを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からヘッダファイル を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ヘッダファイル」の関連用語

ヘッダファイルのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ヘッダファイルのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのヘッダファイル (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS