関数内で静的変数が初期化されるタイミング

解決


ayumi  2010-01-12 20:25:30  No: 71237

下記のtestという関数は、
環境変数TESTの値がONかどうかを判定する関数です。

この関数を別の関数から呼び出すときに、
static env は 最初に呼び出された一回だけ初期化されるため、
getenvは何度も呼び出されないと思っています。

この認識は正しいでしょうか?

bool test()
{
  static bool env = ((stricmp( getenv( "TEST" ), "ON" ) == 0) ? true : false);
  return env;
}

宜しくお願いいたします。


tetrapod  2010-01-12 21:11:15  No: 71238

> この認識は正しいでしょうか?
Yes.

でも他のバグがあるのでこのコードはお勧めできない、かな・・・


ayumi  2010-01-12 22:03:36  No: 71239

tetrapod様、ご回答ありがとうございます。

このコードに含まれているバグとは何なのでしょうか?
また、お勧めのコードをお教えいただけますでしょうか?

宜しくお願いいたします。


tetrapod  2010-01-12 22:23:53  No: 71240

getenv は env がないとき NULL を返すから、今のままではまずい。
どう直すとよいかは、どう動いて欲しいかで異なるので一概に言えない。

そもそも当該プログラム中で putenv したら自己の環境変数の更新ができるわけなので、
最初に1回だけ getenv するのが「仕様として良い」かどうかも要再検討。


ayumi  2010-01-12 22:31:24  No: 71241

tetrapod様、指摘して頂いた点を再検討してみます。
ご回答有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加