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,因为它可以编译和运行。但很有可能原作者认为代码会做一些不同的事情!有两个误解。

  • ComStart和是变体,ComEndCR不是布尔值。
  • 在 VB6=中是相等运算符,而不是 C 中的赋值运算符。
    • CR = False不改变 的值CRCR它比较to的当前值False,并评估为Trueif CRis equal to False。假设它评估为False
    • 现在你有了表达式ComEnd = False。同样,这不会改变 的值ComEnd。它将它与 进行比较False,并评估为True好像ComEnd等于False。这次假设它评估为True
    • 现在你有了赋值语句 ComStart = True。这将值设置ComStartTrue

所以你的原始代码

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

创建两个变体ComStartComEnd一个 Boolean CR,然后

  • CR保持其默认值,False
  • ComEnd保持默认值Empty
  • ComStart设置为False因为Empty = (Empty = False)is 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 回答