C - ヘッダー ファイル
ヘッダー ファイルは、拡張子が .h のファイルです これには、複数のソース ファイル間で共有される C 関数宣言とマクロ定義が含まれています。ヘッダ ファイルには、プログラマが作成するファイルとコンパイラに付属するファイルの 2 種類があります。
C プリプロセス ディレクティブ #include でヘッダー ファイルをインクルードすることにより、プログラムでヘッダー ファイルを使用するように要求します。 、 stdio.h のインクルードを見たように コンパイラに付属するヘッダー ファイル。
ヘッダー ファイルをインクルードすることは、ヘッダー ファイルの内容をコピーすることと同じですが、エラーが発生しやすく、ヘッダー ファイルの内容をソース ファイルにコピーすることはお勧めできません。プログラムに複数のソース ファイルがあります。
C または C++ プログラムでの簡単な方法は、すべての定数、マクロ、システム全体のグローバル変数、および関数プロトタイプをヘッダー ファイルに保持し、必要な場所にそのヘッダー ファイルをインクルードすることです。
構文を含める
前処理ディレクティブ #include を使用して、ユーザー ヘッダー ファイルとシステム ヘッダー ファイルの両方をインクルードします。 .次の 2 つの形式があります −
#include <file>
この形式は、システム ヘッダー ファイルに使用されます。システムディレクトリの標準リストで「file」という名前のファイルを検索します。ソース コードのコンパイル中に -I オプションを使用して、このリストの先頭にディレクトリを追加できます。
#include "file"
この形式は、独自のプログラムのヘッダー ファイルに使用されます。現在のファイルを含むディレクトリで「file」という名前のファイルを検索します。ソース コードのコンパイル中に -I オプションを使用して、このリストの先頭にディレクトリを追加できます。
操作を含める
#include ディレクティブは、現在のソース ファイルの残りの部分を続行する前に、指定されたファイルを入力としてスキャンするように C プリプロセッサに指示することによって機能します。プリプロセッサからの出力には、すでに生成された出力、インクルードされたファイルからの出力、#include の後のテキストからの出力が続きます。 指令。たとえば、次のようなヘッダー ファイル header.h があるとします −
char *test (void);
program.c というメイン プログラム このようにヘッダーファイルを使用します-
int x; #include "header.h" int main (void) { puts (test ()); }
コンパイラは、program.c が読み取った場合と同じトークン ストリームを認識します。
int x; char *test (void); int main (void) { puts (test ()); }
1 回限りのヘッダー
ヘッダー ファイルが 2 回インクルードされた場合、コンパイラはその内容を 2 回処理し、エラーが発生します。これを防ぐ標準的な方法は、ファイルの実際の内容全体を次のように条件付きで囲むことです −
#ifndef HEADER_FILE #define HEADER_FILE the entire header file file #endif
この構造は一般にラッパー #ifndef として知られています。 .ヘッダーが再度含まれると、HEADER_FILE が定義されているため、条件は false になります。プリプロセッサはファイルの内容全体をスキップし、コンパイラはそれを 2 回見ることはありません。
計算済みインクルード
プログラムにインクルードするいくつかの異なるヘッダー ファイルの 1 つを選択する必要がある場合があります。たとえば、さまざまな種類のオペレーティング システムで使用される構成パラメーターを指定する場合があります。次のように一連の条件付きでこれを行うことができます −
#if SYSTEM_1 # include "system_1.h" #elif SYSTEM_2 # include "system_2.h" #elif SYSTEM_3 ... #endif
しかし、サイズが大きくなるにつれて面倒になり、代わりに、プリプロセッサはヘッダー名にマクロを使用する機能を提供します。これは計算されたインクルードと呼ばれます . #include の直接の引数としてヘッダー名を記述する代わりに 、そこにマクロ名を入れるだけです −
#define SYSTEM_H "system_1.h" ... #include SYSTEM_H
SYSTEM_H が展開され、プリプロセッサは #include のように system_1.h を探します。 もともとそのように書かれていました。 SYSTEM_H は、-D オプションを使用して Makefile で定義できます。
C言語