IFの入れ子構造でおかしな現象が発生する

解決


0で除算しました  2006-02-20 18:55:54  No: 94287

いつもお世話になります
VB.Net 2003 WinXP

以下のようなコードを書いた場合

    Private Sub Test()
        Dim i As Integer
        Dim ANS As String

        If True Then
            If False Then ANS = "??"
        Else
            ANS = ""
        End If
    End Sub

ANSに??が代入されます。しかし下記のようなコードですと

    Private Sub Test()
        Dim i As Integer
        Dim ANS As String

        If True Then
            If False Then 
    ANS = "??"
            End If
        Else
            ANS = ""
        End If
    End Sub

正常に動作するようです。これは明らかにIFの判定が
ただしく認識されていないのではないでしょうか?

この件に関してMSの技術情報などを探してみたのですが
残念ながら見つけることができませんでした。

この件に関する技術情報や対策などが掲載されているURL等が
ありましたら教えてください。

このような現象すぐに見つかると思うので自分が第一発見者とは思いにくいです。VBの世界ではこういう書式自体がNGなのでしょうかねぇ・・・


T★M  2006-02-20 19:52:39  No: 94288

当方で実験したところ、1つ目も2つ目も、ANSには何も代入されずに
Notingとなります。
シングルステップだと1つ目の場合にANS = "??"に実行ステップの表示が
移りますが、実行はされていない模様です。

確認環境はVB.Net 2003 WinXPです。


T★M  2006-02-20 19:53:53  No: 94289

脱字です。

誤)Noting → 正)Nothing


特攻隊長まるるう  2006-02-20 20:28:04  No: 94290

>シングルステップだと1つ目の場合にANS = "??"に実行ステップの表示が
>移りますが、実行はされていない模様です。
wホントだ★同様の現象を確認。結果が代入されてないことも確認。
VB.Net 2003 Win2000


papa  2006-02-20 21:19:10  No: 94291

たしかに!
VB 2005  及び  EXCEL VBA(たぶん VB6.0でも・・未確認)では問題なしでした。


特攻隊長まるるう  2006-02-20 21:56:47  No: 94292

[VB6.0(SP5)]で再現されないことを確認。

>このような現象すぐに見つかると思うので自分が第一発見者とは思いにくいです。
結果が問題ないから発見してもWEBに掲載する人は少ないかもねぇ。
…オイラは知りませんでした(  _)_
>VBの世界ではこういう書式自体がNGなのでしょうかねぇ・・・
書式で許されてるし、お決まりの単純コード(Exit Sub)とかでは
使ってますよ。ただ、コーディング規約で使わないようにしてる
所はあるかも。…代入式は1命令でも複数行に書くかなぁ…
後々、同じ条件で代入式が増える可能性が高いから。


我龍院忠太  2006-02-20 22:52:14  No: 94293

特攻隊長まるるうさん、なんか微妙に質問者と食い違っているような。(^^;
>ANSに??が代入されます。しかし下記のようなコードですと
条件が揃わなくても、ANS = "??"が実行されると言ってます。
多分質問者さんは、デバッガ−が ANS = "??"をスキップしないので
??が代入されてると勘違いされてるのでは。
ちなみにILは全く同じ物が吐き出されました。


0で除算しました  2006-02-20 23:23:30  No: 94294

我龍院忠太のおっしゃる通り,ステップが移動したので

値がかわってると思ってました

確認したら実際にはANSに代入されてなかったですね・・・

解決でいいのかなぁ・・・まぁいいか^^;


0で除算しました  2006-02-20 23:28:46  No: 94295

我龍院忠太→我龍院忠太さんで・・・


0で除算しました  2006-02-20 23:28:47  No: 94296

我龍院忠太→我龍院忠太さんで・・・


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

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






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