ソースファイルとヘッダファイルについて
・目次
1.ソースファイルとヘッダファイル
(1) ソースファイルとは
・プログラムを書くファイル
・C言語では、「 xxx.c 」
(2) ヘッダファイル
・ソースファイルに追加して使うファイル
・C言語では、「xxx.h」
・#includeによって、使用するファイルをインクルードする。
2.ソースファイルとヘッダファイルに記載する内容
名前 | ヘッダファイル | ソースファイル | 役割 |
---|---|---|---|
多重インクルード防止 | 〇 | × | ヘッダファイルを多重にインクルードされるのを防止 |
ヘッダファイルインクルード | 〇 | 〇 | #includeによる外部ファイルのインクルード |
マクロ定義 | 〇 | △ | #defineによる定数定義 |
型定義 | 〇 | △ | 構造体、列挙型、共用体のデータ型定義 |
プロトタイプ宣言 | 〇 | △ | 関数のプロトタイプ宣言 |
グローバル変数の外部参照宣言 | 〇 | × | 外部ファイルへ公開するグローバル変数の参照宣言 |
グローバル変数、定数定義 | × | 〇 | グローバル変数の実体定義(変数、定数) |
関数定義 | × | 〇 | 関数の実体定義 |
〇:記載する内容
×:記載しない内容
△:基本書かないが、書くときもある。
3.ソースファイルに書くことの詳細
ソースファイルには下記3点の内容を記載する。
(1) ヘッダファイルのインクルード
(2) グローバル変数、定数定義
(3) 関数定義
//ヘッダファイルのインクルード #include "samp.h" //グローバル変数の実体定義(変数、定数) int samp = 0; //関数定義 void Sample() { //処理 }
上記内容の詳細:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・組み込みC言語基礎知識6(関数) - Project_OKI’s diary
4.ヘッダファイルに書くことの詳細
ソースファイルには下記3点の内容を記載する。
(1) 多重インクルード防止
(2) ヘッダファイルのインクルード
→基本はソースファイル側に書く。
(3) マクロ定義(#define)
(4) 型定義(構造体、列挙型、共用体)
(5) プロトタイプ宣言
(6) グローバル変数の外部参照宣言
//多重インクルード防止 #ifndef SAMPH #define SAMPH //定数値の定義(マクロ定義) #define Sample 0 //構造体の定義 typedef struct{ //構造体の中身 }SAMP //関数のプロトタイプ宣言 extern void Sample(Void) extern void Samp(uint SAN) //グローバル変数外部参照宣言 extern int samp; #endif
上記内容の詳細:
・多重インクルード防止
・構造体
実際に.cファイル、.hを独自に作成する場合
下記のようにフォーマットなどを作成しておくとよい。
ソースファイル
/** ****************************** */ /** * @file .c * @brief ファイルの説明 * @brief Compiler : Atollic True Studio for STM32 9.0.0 * @brief CPU : STM32F401 * @date $LastChangedDate : / / $ * @version $Revision : 1.00 $ */ /** ******************************* */ /* ********************************* */ // インクルード ファイル */ /* ********************************* */ /** ******************************* */ /** 外部定義変数 */ /** ******************************* */ /** ******************************** */ /** 内部定義変数 */ /** ******************************** */ /** ******************************** */ /** * 説明 * @param 引数(ucInitReq) : 引数の説明 * @param *pMainInf : 引数の説明(ポインタ) * @return void : None */ /** ******************************** */ /* ** ファイルの最後 ( samp_trig.c ) ** */
ヘッダファイル
/** ****************************** */ /** * @file form.h * @brief 概要 * @brief Compiler : Atollic True Studio for STM32 9.0.0 * @brief CPU : STM32F401RE * @date $LastChangedDate : / / $ * @version $Revision : 1.00 $ * */ /** ****************************** */ #ifndef FORM_H ///<SAMP_H 未定義? #define FORM_H ///<SAMP_H 定義済み!! /** ****************************** */ /* インクルード ファイル */ /** ****************************** */ #include "samp.h" ///サンプル制御処理 用定義 /** ****************************** */ /* 定数値の定義 */ /** ****************************** */ /** ****************************** */ /* 構造体の定義 */ /** ****************************** */ /** ****************************** */ /* 外部変数の定義 */ /** ****************************** */ /** ****************************** */ /* 関数のプロトタイプ宣言 */ /** ****************************** */ ///<サンプル(長い場合) extern void Init_SmoothSampTrig( UCHAR ucInitReq, USHORT usWaitTim, MAIN_CTRL_INF *pMainInf ); extern void Stop_SampTrig( void ); ///<サンプル #endif ///<SAMP_TRIG_H 未定義 End /* **** ファイルの最後 ( form.h ) ******************************************************************** */
関連記事
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary