H ファイル形式とは?
.h ファイルは、C、C++、または Objective-C 言語で作業する際に作成されます。
.h ファイルの内容
拡張子が .h のファイルには、関数の 宣言またはマクロ が含まれており、次のようなデータを保持できます:
- 変数および定数の宣言
- 構造体(struct)、列挙型(enum)、および型定義
- 他のヘッダーファイルへの
#include参照
実務上、.h ファイルは共有宣言(複数の .c および .cpp ソースファイル間で頻繁に参照されるコード)を保持するために使用されます。これにより、ソースコードの可読性が向上し、プログラマーの効率が高まります。.h ファイルで定義された関数やマクロは、プロジェクト間で再利用可能になり、コードの共有を容易にします。また、インターフェースが単一の既知の場所に保存されるため、コードの更新も容易になります。
.h ファイルはどのように使用されますか?
共有宣言を .h ファイルに保存することで、プロジェクトのソースコードへのアクセスや追加が容易になります。コンパイル中、C プリプロセッサは各 #include ディレクティブを展開し、コンパイラが処理を続行する前にヘッダーの内容を翻訳単位にコピーします。<stdio.h> や <vector> などのシステムヘッダーはコンパイラに付属しており、プロジェクトと一緒に配布する必要はありません。一方、プロジェクト固有の .h ファイルはソースツリーの一部であり、ソースと一緒に移動します。多くの C++ プロジェクトでは、C++ 専用のヘッダーをプレーンな C の .h ヘッダーと区別するために .hpp ファイルも使用しますが、どちらも同じ #include メカニズムに依存しています。
セキュリティと安全性
リスク: LOW.h ヘッダーはプレーンテキストのソースコードであり、それ自体で実行されることはないため、エディタで開いたり読んだりすることは安全です。現実的な注意点は、ファイル形式ではなく「コンパイル」についてです。信頼できないプロジェクトのヘッダー(およびソース)コードには、プログラムをビルドして実行したときにのみ動作する悪意のあるロジックが含まれている可能性があります。そのため、不明な C/C++ コードの確認やビルドは、サンドボックスや仮想マシン内で行い、信頼できるソースからのものだけにしてください。単にテキストを表示するだけならリスクはありません。(ヘッダーはシステムファイルを #include したり、依存コードのコンパイル方法を変えるマクロを定義したりすることもありますが、これは開発者に関連する事項であり、ファイル単体でのセキュリティ上の脅威ではありません。)
形式の詳細
概要- Objective-C / Objective-C++ ヘッダー - Apple の Objective-C も .h ヘッダーを使用し(例:@interface クラスの宣言)、Xcode やテキストエディタで同様に開かれます。
- ch / 各種アプリデータ - ごく一部のニッチなプログラム(および古いゲーム/データツール)が、ソース以外のデータに .h を再利用しています。拡張子ではなく、ファイルの内容で判断してください。
H ファイルを開くプログラム
技術的詳細
詳細仕様| ファイルタイプ | プレーンテキスト・ソースコード・ヘッダー |
| MIME タイプ | text/x-c |
| ファイルシグネチャ (マジックバイト) | なし - プレーンテキスト。拡張子と内容によって識別されます |
| 典型的な開始構造 | 二重インクルードを防止するためのインクルードガード(`#ifndef NAME_H` / `#define NAME_H`)または `#pragma once` |
| プリプロセッサの役割 | コンパイル前に C プリプロセッサによってインライン展開されます。`.h` ファイルは直接コンパイルされません |
| インクルード構文 | システムヘッダーは山括弧(例:`<stdio.h>`)、プロジェクトヘッダーは二重引用符(例:`"mylib.h"`)を使用します |
| 典型的な内容 | 関数宣言、マクロ定義、構造体および列挙型の定義、typedef エイリアス、および(C++ では)クラス宣言 |
| 関連する拡張子 | `.c`, `.cpp`, `.hpp`, `.hxx`, `.hh`, `.cc`, `.cxx` |
| C++ リンケージ | C++ コードに含まれる C ヘッダーは、名前マングリングを防ぐために `extern "C" { }` ブロックで囲まれることがよくあります |
| 文字エンコーディング | ASCII(歴史的な標準)。現代のコンパイラでは、識別子やコメントに UTF-8 が広く受け入れられています |
| 多重インクルード保護 | インクルードガードまたは `#pragma once` により、同じヘッダーが翻訳単位ごとに一度だけ処理されるようにします |
| 標準 C ライブラリヘッダー | `<name.h>` の慣習に従います(例:`<stdio.h>`, `<stdlib.h>`, `<string.h>`) |
| テンプレート定義 (C++) | 関数およびクラスのテンプレートはコンパイル時にインスタンス化されるため、ヘッダーファイル内で完全に定義する必要があります |
| リリース日 | 1972 (C language; #include header convention from early C) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | en.cppreference.com |
H の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。H ファイルについて最初の質問をしてみましょう。