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が警告を出してくれます。