2012-10-12 33 views
2

我正在處理一段遺留代碼,我遇到了一個變量賦值,爲我提出了一些問題。變量PortOpen的類型設置爲Long,稍後在代碼中將其設置爲False。由於False的整數值是0,我假設這只是意味着PortOpen將是0,直到它被修改,但我懷疑這可能會引入一些細微的錯誤。在這種情況下,Long的大小是Boolean的兩倍,因此在邏輯比較中稍後使用PortOpen時是否有可能出現錯誤?或者,一般來說,使用這種類型的變量賦值有什麼怪癖或其他影響?將Long變量設置爲False會產生哪些副作用?

回答

3

這當然是一件壞事,因爲讀取代碼的人會感到困惑,但只要您使用0/False作爲虛假值,-1/True作爲真值,程序應該可以正常工作。

您需要注意將1用於True,因爲這會給您帶來不確定的結果。 1(或實際上除0以外的任何值)會給你在邏輯比較真實,所以這將顯示「真」:

Dim myvar As Long 

myvar = 2 
If myvar Then 
    MsgBox "True" 
Else 
    MsgBox "False" 
End If 

然而,當在應用一個「不」到這個表達式的問題出現了。一般來說,你會想到「不真」是「假」,但下面的代碼會顯示「真」:

Dim myvar As Long 

myvar = 2 
If Not myvar Then 
    MsgBox "True" 
Else 
    MsgBox "False" 
End If 

所以,除了是不好的代碼的可讀性,使用整型或長的布爾CAN導致您的代碼中出現錯誤。

3

正如你所說PortOpen將自動轉換爲TrueLong0,這個任務沒有其他副作用。

除了是不好的做法&爲他人混淆的唯一其他潛在的問題將是PortOpen = 1 = True這是並非如此,因爲Clng(True)-1任何假設。

就我個人而言,我會用00CLOSED符號常量/枚舉來代替assignemtnet。

+0

感謝您的快速響應。我同意你所提出的改變,但源代碼是由老闆的兄弟編寫的,所以它可能需要一些工作才能實現它。 - 它使我在源代碼中留下了一些含糊不清的東西,但我需要知道這是否會成爲最後的選擇。 – Tim

相關問題