.h ファイルは、.c ファイルのインターフェイス ファイルと見なす必要があります。すべての .c ファイルは、一定量の機能を持つモジュールを表します。.c ファイル内の関数が他のモジュール (つまり、他の .c ファイル) によって使用される場合は、関数プロトタイプを .h インターフェイス ファイルに入れます。元のモジュールの .c ファイルと関数が必要な他のすべての .c ファイルにインターフェイス ファイルを含めることで、この関数を他のモジュールで使用できるようになります。
特定の .c ファイル (他のモジュールではなく) の関数のみが必要な場合は、そのスコープを静的に宣言します。これは、定義されている c ファイル内からのみ呼び出すことができることを意味します。
複数のモジュールで使用される変数についても同様です。それらはヘッダー ファイルに入れ、キーワード「extern」でマークする必要があります。注: 関数の場合、キーワード「extern」はオプションです。関数は常に「extern」と見なされます。
ヘッダー ファイルのインクルード ガードは、同じヘッダー ファイルを複数回インクルードしないようにするのに役立ちます。
例えば:
Module1.c:
#include "Module1.h"
static void MyLocalFunction(void);
static unsigned int MyLocalVariable;
unsigned int MyExternVariable;
ボイド MyExternFunction(ボイド)
{
MyLocalVariable = 1u;
/* 何かをする */
MyLocalFunction();
}
static void MyLocalFunction(void)
{
/* 何かをする */
MyExternVariable = 2u;
}
Module1.h:
#ifndef __MODULE1.H
#define __MODULE1.H
extern unsigned int MyExternVariable;
void MyExternFunction(void);
#endif
Module2.c
#include "Module.1.h"
static void MyLocalFunction(void);
static void MyLocalFunction(void)
{
MyExternVariable = 1u;
MyExternFunction();
}