外部変数は使うな!?
目次に戻る
C言語でプログラムをしていると「外部変数はむやみに使うな」という事を耳にします。果
たして本当でしょうか?私の経験から言いますと、使わなくてよいのなら使うない方がよい
です。
では、データのやり取りは全て引数で行うのか?というと、そうではありません。複数
の関数で共通に使われるような変数は、Set〜〜〜、Get〜〜〜〜のような関数でアクセ
スするように決めるのです。
/* 例:外部変数を使った場合 */
NowStatus = nsIdle;
:
:
switch( NowStatus ){
case nsIdle:
:
:
:
}
/* 例:外部変数を使わない場合 */
SetNowStatus( nsIdle );
:
:
switch( GetNowStatus() ){
case nsIdle:
:
:
:
}
外部変数1つにつき、SetとGetの二つの関数を用意しないといけないという手間が増えま
すが、関数内でエラーチェックが行える等、この手間は後々の利点に比べれば大した物
ではありません。
例外としては、速度を求める処理があります。
外部変数のアクセスに関数を使ってしまうと、関数呼び出し時のオーバーヘッドが発
生し処理が遅くなってしまいます。
でも、次のようなマクロを使えばそのような問題も無くなります。
#ifdef DEBUG
#define SetNowStatus(x)
FUNCTION_SetNowStatus(
x )
#define GetNowStatus()
FUNCTION_GetNowStatus()
#else
#define SetNowStatus(x) GNowStatus
= x
#define GetNowStatus() GNowStatus
#endif
余談
たこのすけはこのような事をきちんとやっているのかというと、面倒くさいからやって
な〜〜い(^^;
まずいなぁ、とは思っているんだけどね。
目次に戻る