使用遗留代码时,我遇到了一些奇怪的变量赋值,我不确定它们是否是合法的 VB6 语法,但我找不到支持这种感觉的文档。
Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False
我的怀疑是
a) 原始声明应为
Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean
b)现在实施的声明不会分配任何东西给ComStart
.
非常感谢任何答案或文档
使用遗留代码时,我遇到了一些奇怪的变量赋值,我不确定它们是否是合法的 VB6 语法,但我找不到支持这种感觉的文档。
Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False
我的怀疑是
a) 原始声明应为
Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean
b)现在实施的声明不会分配任何东西给ComStart
.
非常感谢任何答案或文档
您找到的代码在技术上是合法的VB6,因为它可以编译和运行。但很有可能原作者认为代码会做一些不同的事情!有两个误解。
ComStart
和是变体,ComEnd
而CR
不是布尔值。=
中是相等运算符,而不是 C 中的赋值运算符。
CR = False
不改变 的值CR
。CR
它比较to的当前值False
,并评估为True
if CR
is equal to False
。假设它评估为False
ComEnd = False
。同样,这不会改变 的值ComEnd
。它将它与 进行比较False
,并评估为True
好像ComEnd
等于False
。这次假设它评估为True
。ComStart = True
。这将值设置ComStart
为True
所以你的原始代码
Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False
创建两个变体ComStart
和ComEnd
一个 Boolean CR
,然后
CR
保持其默认值,False
ComEnd
保持默认值,Empty
ComStart
设置为False
因为Empty = (Empty = False)
is False
。简单的!...我希望遗留代码的其余部分更少,好吧,偶然。
所以代码应该是,正如你猜到的:
Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean
对于经验很少或没有经验的 VB6 开发人员或使用 VB6 代码的 .NET 开发人员来说,这是一个常见的错误 :)。它可以工作,因为 VB6 将假定分配的值并自动转换它,但它也可能导致难以调试的讨厌的错误。