外部変数は使うな!?


目次に戻る


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
余談
たこのすけはこのような事をきちんとやっているのかというと、面倒くさいからやって な〜〜い(^^;
まずいなぁ、とは思っているんだけどね。


目次に戻る