Project_OKI’s diary

エンジニアの勉強ブログ

C言語基礎知識16(ソースファイルとヘッダファイル) 

​​​ソースファイルとヘッダファイルについて

・目次

 

 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

C言語基礎知識4(if文) - Project_OKI’s diary

C言語基礎知識5(switch文) - Project_OKI’s diary