预处理程序支持以下三种类型的变量:
预处理程序支持变量之间的大多数常见比较(<=、<、>=、>
和 ==
)。
此外,还支持对所有符号类型执行布尔运算,如 &&、||、! 和 ^
。
在执行布尔运算时,整数和字符串的操作相同。但是,它们将作为纯整数进行比较,并且可以在预处理代码等任务时使用,其中不同的屏幕分辨率需要为其优化不同的图像。例如,指令
//#if ScreenWidth>100 && ScreenHeight>120
可以指定一个代码块,它仅为大于 100x120 屏幕的设备导入图像。
如果定义了一个变量,则可以将其视为值为 "true" 的布尔变量。如果未将变量定义为性能或配置,则可以将其视为值为 "false" 的布尔变量。
不允许对不同的变量类型进行比较。但是,此类比较不会中断生成过程。如果要对不同的变量类型进行比较,预处理程序将在编辑器和“输出”窗口中发出警告,并按以下方式计算这些表达式:
共有三种类型的运算符,它们具有不同的优先级:
此运算符具有最高优先级,可以在变量和表达式中使用,其语法为 !<标识符>
或 !<表达式>
。
例如,//#if !(ScreenWidth>100 && ScreenHeight>120)
用于检查屏幕大小是否小于 100x120。
由于 !
运算符具有最高优先级,因此诸如 //#if !ScreenSize=="100x200"
之类的表达式是非法的,并且会产生语法错误,原因是布尔结果不能与字符串进行比较。
比较运算符具有次高优先级,执行典型的比较运算。由于这些运算符可以按词法比较字符串,并按数学方式比较整数,因此,它们支持跨类型比较。但是,这些运算符只能在表达式中使用,并且应该比较两个变量,而不是符号。
还有一个特殊的比较运算符,用于执行“子集”关系运算。该运算符表示为 @
字符。左侧和右侧的参数应当为字符串,用来表示由特定的分隔符分隔的两组标记。该运算符首先将左侧和右侧的字符串参数视为集合,然后确定左侧参数的集合是否为右侧参数的集合的子集。有效的字符分隔符是 <空格>、","
和 ";"
。可以在每个参数中混合使用这些分隔符,如下例所示。
"gif" @ "gif86, jpeg, gifaboo" = false
"gif" @ "gif gif86 jpeg" = true
"1 2 4;7,8" @ "0,1,2,3,4,5,6,7,8,9" = true
"3 5 7 11 13" @ "0,1,2,3,4,5,6,7,8,9" = false
相对于其他运算符而言,布尔运算符具有最低的优先级。这些布尔运算符彼此之间也具有不同的优先级,就像在 Java 语言中一样。布尔运算符对布尔表达式结果执行典型的逻辑运算(如 &&、||
和 ^
),或者检查变量定义,然后也将它们作为布尔表达式进行处理。将按以下顺序来处理布尔运算符:
&&