/** 
 * @file sample.h
 * 
 * @brief コーディングスタイルのサンプルコード（ヘッダーファイル版）
 *
 * ルール全体はsample.cに書いてある。
 * これはヘッダーファイル特有のルールに関する見本である。
 *
 * @author Lily <bt@k5-n.com>
 *
 * @date $Id$
 *
 * <!-- Copyright(C) 2006 Lily -->
 */

/* ###ヘッダファイルは重複取り込みに対応させる（記述方法は下記参照） */
/* [モジュール名]_Hという名前を利用する */
#ifndef SAMPLE_H
#define SAMPLE_H

/* ###関数宣言の引数名は省略せず、関数定義と同様とする */
int sample_execute(int arg1, int arg2);

/* ###セッターやゲッターなど、グローバル変数をラップするためのマクロは小文字 */
/* ###その際の名前は外部公開関数の命名規則に従う */
#define sample_get_initialized_value	(g_sample_initialized_value)
#define smaple_set_interrupt_flag(flag)	{\
	g_sample_interrupt_flag = flag;
}

/*
 * 本来、グローバル変数を外部に直接公開するのは良い設計とは言えない。
 * ただし関数を介すようにするとメモリやパフォーマンスの効率が悪い。
 * 関数に見立てたマクロを必ず経由させるようにするとよいだろう。
 * 結局、外部に公開していることに変わりはなく、
 * あくまで利用者が注意するというレベルであり効力が薄いが、
 * 幾分マシであろうと思う。
 * 関数内でg_が付いた変数を利用していないかどうかをチェックするツールを用意し、
 * 徹底させるようにすると良いだろう。
 */
extern unsigned short g_sample_initialized_value;
extern volatile unsigned char g_sample_interrupt_flag;

/* ### #elseや#endifにはコメントを入れ，対応関係を明確にする */
#endif	/* SAMPLE_H */
