2

我正在处理一段遗留代码,我遇到了一个变量赋值,这给我带来了一些问题。该变量PortOpen的类型设置为 声明Long,后来在代码中设置为等于False。由于 is 的整数值False0我认为这只是意味着在它被修改之前PortOpen0是,但我怀疑这可能会引入一些微妙的错误。在这种情况下, ALong的大小是 a 的两倍,那么以后在逻辑比较中Boolean使用时是否有可能出错?PortOpen或者,一般来说,使用这种类型的变量赋值是否有任何怪癖或其他影响?

4

2 回答 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 回答