条件编译允许有选择地编译程序的某些部分。在不同的版本中可以包括应用程序的某些特别的功能,例如,设计一个可以在不同的平台上运行的应用程序,或者改变一个以多种语言发布的应用程序中的日期和货币的显示过滤器。
要有条件地编译代码的某一部分,应将该部分代码封闭在 #If...Then 和 #EndIf 语句之间,使用一个布尔常数作为分支检测。要编译被封闭的代码,可将该布尔常数设置为 -1 (True)。
例如,要从同一份源代码创建同一个应用程序的法语版本和德语版本,可使用预定义常数 conFrenchVersion 和 conGermanVersion 将与平台有关的代码部分嵌入 #If...Then 语句之间。
#If conFrenchVersion Then '<
适用于法语版本的代码>
。#ElseIf conGermanVersion then
'<
适用于德语版本的代码>
。#Else
'<
适用于其它版本的代码>
。#End If
如果在编译时常数 conFrenchVersion 的数值被设置为 True,则适用于法语的代码将被编译。如果常数 conGermanVersion 的数值被设置为 True,则编译器使用适用于德语版本的代码。
设置条件编译常数有三种方法:在“工程属性”对话框的“制作”选项卡的“条件编译参数”字段设置条件编译常数、在命令行或在代码中设置条件编译常数。
条件编译常数有特别的作用范围,不能从标准代码中访问。如何设置条件编译常数可能取决于希望常数具有怎样的作用范围。
如何设置 | 范围 |
“工程属性”对话框 | Public 作用于工程中的所有模块 |
命令行 | Public 作用于工程中的所有模块 |
代码中的 #Const 语句 | Private 仅作用于声明该常数的模块 |
在创建可执行文件前,从“工程”菜单选择“工程属性”,单击“工程属性”对话框中的“生成”选项卡,在“条件编译参数”字段中键入一个参数,例如 conFrenchVersion = –1(如果希望将应用程序编译成法语版本的话)。当程序被编译时,该参数将满足 #If...Then 的条件,处于 #If...Then 和 #EndIf 之间的代码将包含进编译后的程序中。
如果是包含一个或多个 #ElseIf 语句的复杂 #If...Then 语句,则需要设置另外的常数。可参照以下示例通过冒号间隔来设置多个常数:
conFrenchVersion=-1:conANSI=0
如果要从命令行启动编译,可以使用 /d 开关键入条件编译常数,如下所示:
vb.exe /make MyProj.vbp /d conFrenchVersion=–1:conANSI=0
在 /d 开关与第一个常数之间不需要空格。命令行的常数声明将覆盖在“工程属性”对话框中键入的常数声明,但并不清除它们;在“工程属性”对话框中设置的参数对后续的编译保持有效。
详细信息 请参阅“#If…Then_#Else 伪指令”和“#Const 语句”。