我正在处理一段遗留代码,我遇到了一个变量赋值,这给我带来了一些问题。该变量PortOpen
的类型设置为 声明Long
,后来在代码中设置为等于False
。由于 is 的整数值False
,0
我认为这只是意味着在它被修改之前PortOpen
将0
是,但我怀疑这可能会引入一些微妙的错误。在这种情况下, ALong
的大小是 a 的两倍,那么以后在逻辑比较中Boolean
使用时是否有可能出错?PortOpen
或者,一般来说,使用这种类型的变量赋值是否有任何怪癖或其他影响?
问问题
97 次
2 回答
3
正如您所说PortOpen
,将0
在自动转换True
为 a之后Long
,此分配没有其他副作用。
除了不好的做法和让其他人感到困惑之外,唯一的其他潜在问题是任何假设PortOpen = 1 = True
情况并非Clng(True)
如此-1
。
0
我个人会用0
CLOSED
符号常量/枚举替换assignemtnet 。
于 2012-10-12T12:56:13.637 回答
3
这当然是一件坏事,因为它会使阅读代码的人感到困惑,但是只要您将 0/False 用于 false 值,将 -1/True 用于 true 值,程序就应该可以正常工作。
您需要注意将 1 用于 True,因为这会给您带来模棱两可的结果。1(或者实际上是 0 以外的任何值)将在逻辑比较中为您提供 True,因此这将显示“True”:
Dim myvar As Long
myvar = 2
If myvar Then
MsgBox "True"
Else
MsgBox "False"
End If
但是,当您对该表达式应用“不”时,就会出现问题。通常你会认为“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 回答