(Turbo Delphi2006)
ボタンを押すといろいろと処理をするコードを書いています。その最初のコードに、変数(整数型)を初期化するため、0を代入しています。が、その変数をローカル変数として記述していたところ(ローカルにしか使わないため)、0が代入されていない変数があります。というのも、8つほど変数を定義しているのですが、そのうちの6つが、0が代入されていない状態になります。なぜ代入されていないと言えるのか、といいますと、デバッグ作業の最後に、「変数○○○に代入された値は使われていません」とでます。ブレークポイントを置いてコードを見ながらやってみると、その6つの変数に0を代入するところだけ飛ばされていました。
それで、その6つの変数だけグローバル変数に変えてみましたところ、0が代入されていました。(なぜ・・・?) それで何日かたって、もう一度その6つの変数を、ローカル変数へと戻してみたところ、0が代入されていました。もちろん過ぎた日にちの間でコードはいろいろと変えましたが、その6つの変数は相変わらずローカルにしか使っていません。で、またしばらく日にちがたって、実行してみると、「変数○○○に代入された値は使われていません」 ブレークポイントを設置してみて確認すると、やはりその6つだけ0が代入されず、飛ばされていました。で、グローバル変数に変更してみると、代入されました。
結局何が聞きたいのかといいますと、ローカルにしか使わない変数を、グローバル変数として定義しなければならない理由として、どういったことが挙げられるでしょうか、ということです。
値が不定なのは、実行時において一度も使用されないためです。
「ローカルにしか使わない変数を、グローバル変数として定義
しなければならない理由」は、無いと思います。
初期化するだけで使用しない変数は削除するといいと思います。
これは、コンパイラがローカルでどこにも使っていない変数は使わないようにするためです。使えば初期化します。
すいません。エラーメッセージが違っていました。(確認せずに送信してしまいました)
「変数○○○に代入された値は使われていません」
↓↓
正しくはこっち
「変数 '○○○' が宣言されていますが 'TForm1.Button1Click' の中では使われていません」
これが6行。この場合も
'TForm1.Button1Clickの中で変数○○○なんて使ってねぇよ'っていうことですよね(書き直しただけにしか見えない・・)
でも、ものすごく?使ってます。結果的に使わなかたりする、というようなこともないです。Button1を押したら必ず使います。
例えば以下のような場合、ib1は下のほうで使用されていても、
1行目は無視されますよね。
ib1 := 1; //この行は無視される
ib2 := 2;
ib3 := 3;
ib1 := ib2 + ib3;
showmessage(inttostr(ib1));
deldelさんの例で言うと、
ib1に代入された1は、結果的に使ってないから(使っていないのと同じだから)無視される、ということですよね。
私が書いているコードはそういったことにはなっていないようです。
例えば
ha:=0;
として、haに値が何も代入されないまま終わる場合はあります。が、0は0として最後に表示させるため、(前にhaに代入されていた値がそのまま表示されないよう)初期化ということでやってます。
再現できるソースを貼り付けてください
あのー・・・コードを貼り付けようと思って、できるだけまとめようとしてたら、ありました・・・deldelさんの
”例えば以下のような場合、ib1は下のほうで使用されていても、
1行目は無視されますよね。
ib1 := 1; //この行は無視される
ib2 := 2;
ib3 := 3;
ib1 := ib2 + ib3;
showmessage(inttostr(ib1)); ”
というような場所が。
一度全部0にしてから改めて、とやったほうがわかりやすいかなぁと思ってたんですが、無駄みたいですね。 申し訳ない。
ツイート | ![]() |