e30.c
ヘッダファイル内でstaticを使うのはやめよう





修正前1
static int data[] = {
0xFF,0xFF,0xFF,0xFF,
/* ヘッダファイル内で延々と続く */
0xFF,0xFF,0xFF,0xFF
};
修正例1
/* 初期化は .cソースファイルで行う */
extern int data[];
解説1
ヘッダファイルでstatic 付きの関数外部変数の初期化を行うとインクルードした
全ての".c"ファイルで展開されてしまうので、メモリの無駄です。
修正前2
/* ヘッダファイルでstaticを付けた初期値あり外部変数”i”??? */
static int i = 0;
解説2
ヘッダファイルは、スコープの広い変数を宣言する所です。
スコープを限定するstatic をヘッダファイルに記述するのは矛盾していませんか?
・外部変数に”i”は、名前が短すぎます。
・外部変数には、staticではなく、extern を記述すべきです。
・外部変数の初期化は、".c"ファイルで行って下さい。
解説3
データの無駄です。
─────────────────
自モジュール(.c)でしか使用しない、
変数/関数にはstaticを付けましょう。
以下のメリットがあります。
(1) 『話』が自モジュール内で閉じるため、
修正時、他人=他モジュールの事を考え無くてよい。
(2) 経年変化で不要になった時、
lint,Review-Cが警告を出してくれます。