在Visual Basic 6中的一个语句中的多个变量赋值

时间:2012-10-22 13:12:15

标签: vb6 variable-assignment

使用遗留代码我遇到了一些奇怪的变量赋值,我不确定是合法的VB6语法,但我找不到文档来备份这种感觉。

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

我的怀疑是

a)原始声明应为

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

b)现在实施的声明不会向ComStart分配任何内容。

非常感谢任何答案或文件

2 个答案:

答案 0 :(得分:6)

您找到的代码在技术上是 legal VB6,因为它编译并运行。但原作者很可能认为代码会做出不同的事情!有两个误解。

  • ComStartComEnd以及CR是变体,而不是布尔值。
  • 在VB6中,=是等于运算符,而不是C中的赋值运算符。
    • CR = False不会更改CR的值。它将CR的当前值与False进行比较,如果True等于CR,则评估为False。假设它的评估结果为False
    • 现在你有了表达式ComEnd = False。同样,这不会改变ComEnd的值。它将其与False进行比较,如果True等于ComEnd则评估为False。这一次让我们说它评估为True
    • 现在您拥有分配声明 ComStart = True。这会将ComStart的值设置为True

所以你的原始代码

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

创建两个变体ComStartComEnd以及一个布尔CR,然后

  • CR保留其默认值False
  • ComEnd保留其default valueEmpty
  • ComStart设置为False,因为Empty = (Empty = False)False

简单! ...我希望剩下的遗留代码更少,嗯,意外

答案 1 :(得分:2)

所以代码应该是,正如你猜测的那样:

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

对于经验很少或没有经验的VB6开发人员来说,这是一个常见的错误,或者.NET开发人员正在使用VB6代码:)。它可以工作,因为VB6会假设分配的值并自动投射它,但它也可能导致令人讨厌的错误很难调试。