#IF ... #endif 預處理器命令
在編譯時根據條件決定是否編譯某段原始碼。
語法
#IF nExpression1 | lExpression1
Commands
[#ELIF nExpression2 | #ELIF lExpression2
Commands
...
#ELIF nExpressionN | #ELIF lExpressionN
Commands]
[#ELSE
Commands]
#ENDIF
參數
#IF nExpression1 | lExpression1
Commands
nExpression1 給出了要計算的數值表達式。
如果該表達式的值不為零,則編譯緊接在 #IF 命令後面的程式。然後退出 #IF ... #ENDIF
結構,接著編譯 #ENDIF 命令後面的程式。
如果該表達式的值為 0,則不編譯緊接在 #IF 命令後面的程式,而計算 #ELIF 命令後的表達式。
lExpression1 給出要計算的邏輯表達式。
如果邏輯表達式的值為“真”(.T.),則編譯緊接在 #IF 命令後面的程式。然後退出 #IF ... #ENDIF 結構,接著編譯 #ENDIF 命令後面的程式。
如果邏輯表達式的值為“假”(.F.),則不編譯緊接在 #IF 命令後面的程式,而計算 #ELIF 命令後的表達式。
附註
請不要為 nExpression1 和 lExpression1 指定系統記憶體變數。因為系統記憶體變數只有在運行時才具有值。
#ELIF nExpression2 | #ELIF lExpression2
Commands
...
#ELIF nExpressionN | #ELIFlExpressionN
Commands
如果表達式 nExpression1 的值為 0,或者表達式 lExpression1 的值為“假”(.F.),則計算 #ELIF
命令。如果存在 nExpression2 或 lExpression2,則計算 #ELIF 命令中表達式的值。如果表達式 nExpression2 的值不為 0,或者表達式 lExpression2 的值為“真”,則編譯在 #ELIF 命令後的程式代碼,然後退出 #IF ... #ENDIF 結構,接著編譯 #ENDIF 命令後面的程式。
如果表達式 nExpression2 的值為 0,或者表達式 lExpression2 的值為“假”(.F.),則不編譯 #ELIF 命令後的程式,而繼續處理下一個 #ELIF
命令。
#ELSE Commands
如果沒有 #ELIF 命令,或者全部 #ELIF 命令的表達式計算結果都為 0 或都為“假”(.F.),
#ELSE 的存在與否將決定 #IF ... #ENDIF 結構中是否有其他需要編譯的程式。
如果存在 #ELSE 語句,則編譯緊接在 #ELSE 命令後面的程式代碼。
如果不存在 #ELSE 語句,在 #IF 和 #ENDIF 之間則沒有要編譯的代碼。退出 #IF ... #ENDIF 結構後,編譯從 #ENDIF 後面的第一行程式繼續進行。
#ENDIF
表示 #IF 語句的結束。
說明
#IF ... #ENDIF 能夠提高原始碼的可讀性,縮小編譯後程式的大小,以及在某些情況下提高程式的運行性能。
編譯 #IF ... #ENDIF 結構時,首先計算該結構中的一系列邏輯表達式或數值表達式的值,這些表達式的計算結果將決定編譯哪些 Visual FoxPro 程式(如果存在)。
示例
IF ... #ENDIF 預處理器命令示例
在下面的示例中,使用 #IF ... #ENDIF 結構確定使用哪個 Visual FoxPro 版本編譯程式,並顯示相應的信息。
#IF 'WINDOWS' $ UPPER(VERSION( ))
? 'This was compiled under Visual FoxPro'
#ELIF 'MAC' $ UPPER(VERSION( ))
? 'This was compiled under FoxPro for Macintosh'
#ELIF 'UNIX' $ UPPER(VERSION( ))
? 'This was compiled under FoxPro for UNIX'
#ELSE
? 'This was compiled under FoxPro for MS-DOS'
#ENDIF