static宣言の利点 – プログラミング – Home

通知
すべてクリア

[解決済] static宣言の利点


ドルドル
 ドルドル
(@ドルドル)
ゲスト
結合: 19年前
投稿: 96
Topic starter  

 いつもお世話になります。VC++6.0非MFCで開発をしております。
文字列の配列を宣言する際などに以下のようなソースをよく見ます。

void XXXX::func1(){

static char *data[4] = {
aaa, bbb, ccc, dddd  ・・・ 。
};

  ・・・    // なんらかの処理

};

そして func1()はいろんな箇所で呼ばれているのですが、配列宣言を行っている箇所の
staticって何か利点があるのでしょうか?? 私が理解しているのはstatic宣言すれば曖
昧ではありますが

 ・オブジェクトが消滅するまで値が保持される
 ・extern とは反対に情報を隠蔽する性質

といったようなことです。
i)の箇所をstatic宣言で毎回初期化がされなくなり、処理効率がよくなるのかなぁ??
とか考えているのですが、解釈を間違えているでしょうか??
 長々となりましたが、ご教授よろしくお願いします。


引用未解決
トピックタグ
ドルドル
 ドルドル
(@ドルドル)
ゲスト
結合: 19年前
投稿: 96
Topic starter  

すいません。一部文字化けしていました。修正します

static char *data[4] = {
aaa, bbb, ccc, dddd  ・・・ i)
};

です。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> i)の箇所をstatic宣言で毎回初期化がされなくなり、処理効率がよくなるのかな
ぁ??
> とか考えているのですが、解釈を間違えているでしょうか??

お試しコード書いて動かせばわかるやん。


返信引用
abc
 abc
(@abc)
ゲスト
結合: 23年前
投稿: 16
 

void XXXX::func1()
{
static int count=0;
count++;
};

オブジェクトが複数で
それぞれのオブジェクトで func1()を呼び出したときの count値

オブジェクトを削除して、もう一度つくった時の count値
みてみたら


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

>・オブジェクトが消滅するまで値が保持される
ちがう。「プログラム終了まで値が保持される」なら正しい

>・extern とは反対に情報を隠蔽する性質
大域変数に対してはこれは正しい。
局所変数の隠蔽は { } によるスコープによって行われるので違う

>static宣言で毎回初期化がされなくなり、処理効率がよくなるのかなぁ??
この場合はそういうこと。ただしこの例では const 指定が無いので
速度向上にはなりそうだがメモリ消費量向上にはあまり寄与してない。
# っていうか典型的間違いを含んでいるわけだが
組み込み系で「効率向上のために」こーいうコードを書いている新人君がいたら
まだ青いなー、指導が必要と判断されることになるのであった


返信引用
さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
 

static char *data[] = {
aaa, bbb, ccc, dddd  ・・・ i)
};

正しく書くと、こんな感じでしょうか。
本題から外れて、ごめんなさい。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

>正しく書くと
というのは俺の発言を受けての話?もしそうなら、俺の意図はそうではない。

string literal は const char [] (または const wchar_t[]) だよ→
string literal を char * にするのは deprecated だよ→
const char* data[]={..., ...}; でないとダメだよ
と、ここまでが「典型的間違い」の解説。

んで、これ以後は元発言に出てない話を俺が勝手に脳内補完してるだけだが
「もしこの data 自体も const でよいのであれば」 // これを補完
メモリ使用効率の向上も狙いたいのであれば const の置き方が足らない。
const char* const data[]={..., ...}; なら良い。

マイコン組み込み用途だとこの3つの違いは大きい。
# PC ソフトでは大差ないかもしれんが


返信引用
さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
 

>>正しく書くと
>というのは俺の発言を受けての話?もしそうなら、俺の意図はそうではない。

tetrapodさん
 いいえ、違います。一番最初のコードを見て思っただけです。
 「典型的な間違い」は、書かれている文面から他の事だろうとは思っていました。
 こう言う事だったのですね。組み込み系の経験が少ない私は、やっぱり青かったです。
 解説ありがとうございました。


返信引用
ドルドル
 ドルドル
(@ドルドル)
ゲスト
結合: 19年前
投稿: 96
Topic starter  

 みなさん。ありがとうございます。
 staticの扱いにまだまだ理解不足な部分もあるみたいですので、みなさんの意見を参
考にプログラムを組んでみます。いろいろありがとうございました


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました