C言語関係掲示板

過去ログ

No.160.staticの機能


No.1023

「static」について
投稿者---AKI(2002/02/05 12:24:09)


プログラムの中で、構造体を作成し同じプログラム内の複数の関数で
その構造体の変数を使用したいのですが、その構造体の型宣言をstaticに
したほうがいいのでしょうか。
ただし、その構造体に入れる値もある関数の中で代入するので、定数ではありません。
staticにするかしないかの判断は、どのように行えばよいでしょうか?
staticにする必要とは何でしょうか?

よろしくお願いします。

typedef struct
  {
    char  kyk_sbt [ 2];
    char  jcy_sbt [ 2];
    char  ptn_sbt [31];
  }CALENDAR;

static CALENDAR wk_CALENDAR[100];


No.1028

Re:「static」について
投稿者---kikk(2002/02/06 01:52:01)


ども。


>staticにするかしないかの判断は、どのように行えばよいでしょうか?
>staticにする必要とは何でしょうか?

staticの機能は大きく2つあります。

1. 寿命の指定
2. スコープの制限

1.はautoと対比すればわかりますが、変数の寿命をプログラムの開始から
終了までになるように指定します。実行中、すっと値を保持できます。
2.はそのシンボルがファイル中からのみ見えるようにします。

1.の使い方はアルゴリズム上の実装方法という面からの利用になりますが、
2.はカプセル化(隠蔽化)による安全性の向上が目的となります。

(2.の意味の)使いどころは、外からみえなくてもいい(見えないほうがいい)
ものにつける、といったところでしょうか。

過去ログ
http://f1.aaa.livedoor.jp/~pointc/log79.html
のstaticおよびモジュール分割に関する書き込みも参考にしてみてください。


それと、staticをつけると明示的な初期化子がなくても0で初期化されます。
また、明示的な初期化を指定した場合は、初期化は最初に1回だけ行われます。


提示されている(グローバルな?)構造体は、各関数からどのようにアクセス
されているのか、またモジュール化がどの程度できているのかがわからない
ので、staticにすべきかどうかはちょっと判断がつきません。。


では。

戻る


「初心者のためのポイント学習C言語」 Last modified:2002.03.16
Copyright(c) 2000-2002 TOMOJI All Rights Reserved