2

私は仕事でレガシーコードの一部に取り組んでおり、いくつかの疑問を投げかける変数の割り当てに遭遇しました。変数PortOpenは、型が に設定されて宣言されLong、コードの後半で に等しく設定されましたFalse。の整数値はFalseisであるため、これは、変更されるまでは will である0ことを意味しているだけだと思いますが、これによりいくつかの微妙なバグが発生する可能性があるのではないかと疑っています。この場合、 Aは a の 2 倍のサイズなので、後で論理比較で使用するときにエラーが発生する可能性はありますか? または、一般的に、このタイプの変数割り当てを使用する際の癖やその他の影響はありますか?PortOpen0LongBooleanPortOpen

4

2 に答える 2

3

あなたが言うPortOpenように、から a0への自動変換の後になりますが、この割り当ての他の副作用はありません。TrueLong

悪い習慣であり、他の人を混乱させることは別として、他の唯一の潜在的な問題は、現状PortOpen = 1 = Trueではそうではないという仮定Clng(True)です-1

個人的には、assignemtnet を0または0 CLOSED記号定数/列挙型に置き換えます。

于 2012-10-12T12:56:13.637 に答える
3

コードを読む人にとって混乱を招くため、これはもちろん悪いことですが、偽の値に 0/False を使用し、真の値に -1/True を使用する限り、プログラムは正常に動作するはずです。

あいまいな結果が得られるため、True に 1 を使用しないように注意する必要があります。1 (または実際には 0 以外の任意の値) は、論理比較で True を返すため、「True」と表示されます。

Dim myvar As Long

myvar = 2
If myvar Then
    MsgBox "True"
Else
    MsgBox "False"
End If 

ただし、この式に「Not」を適用すると問題が発生します。通常、「Not True」は「False」であると予想されますが、次のコードでは「True」と表示されます。

Dim myvar As Long

myvar = 2
If Not myvar Then
    MsgBox "True"
Else
    MsgBox "False"
End If

したがって、コードの可読性が悪いだけでなく、ブール値に Integer または Long を使用すると、コードでエラーが発生する可能性があります。

于 2012-10-12T13:40:53.600 に答える