2

レガシーコードを使用していると、正当なVB6構文であるかどうかわからない奇妙な変数の割り当てに遭遇しましたが、その感覚を裏付けるドキュメントが見つかりません。

Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False

私の疑いは

a)元の宣言は

Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean

b)現在実装されている宣言は、に何も割り当てませんComStart

回答やドキュメントは大歓迎です

4

2 に答える 2

6

あなたが見つけたコードは、コンパイルして実行できるため、技術的に合法なVB6 です。しかし、元の作成者は、コードが何か違うことをするだろうと考えていた可能性が非常に高いです! 二つの誤解があります。

  • ComStartand ComEndandCRはバリアントであり、ブール値ではありません。
  • VB6=では、C に見られる代入演算子ではなく、等価演算子です。
    • CR = Falseの値を変更しませんCR。の現在の値を と比較し、CRがと等しいかのようFalseに評価します。として評価するとしましょうTrueCRFalseFalse
    • これで式ができましたComEnd = False。繰り返しますが、これは の値を変更しませんComEnd。と比較し、が に等しいかのようFalseに評価します。今回は と評価するとしましょう。TrueComEndFalseTrue
    • これで代入文 ComStart = Trueができました。これにより、 の値がComStartに設定されます。True

だからあなたの元のコード

Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False

2 つのバリアントComStartComEndBooleanを作成CRし、次に

  • CRデフォルト値を保持し、False
  • ComEndデフォルト値を保持し、Empty
  • ComStartに設定されてFalseいるためEmpty = (Empty = False)ですFalse

単純!...レガシーコードの残りの部分が、偶然ではないことを願っています。

于 2012-10-22T14:44:05.697 に答える
2

ご想像のとおり、コードは次のようになります。

Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean

これは、経験がほとんどまたはまったくない VB6 開発者、または VB6 コードに取り組んでいる .NET 開発者によくある間違いです:)。VB6は割り当てられた値を想定して自動的にキャストするため、機能しますが、デバッグが非常に困難な厄介なバグを引き起こす可能性もあります.

于 2012-10-22T14:43:53.583 に答える