O pré-processador oferece suporte a três tipos de variáveis:
Há suporte para as comparações mais comuns (<=, <, >=, >
e ==
) entre as variáveis.
Operações de valor booleano como &&, ||, ! e ^
também podem ser realizadas em todos os tipos de símbolos.
Os inteiros possuem o mesmo comportamento das strings em operações de valor booleano. Entretanto, eles são comparados como inteiros reais e podem ser usados em tarefas como código de pré-processamento onde várias resoluções de tela requerem imagens diferentes que são otimizadas para resoluções diferentes. Por exemplo, a diretiva
//#if ScreenWidth>100 && ScreenHeight>120
pode especificar um bloco de código que irá importar imagens somente para os dispositivos cujas telas forem maiores que 100x120.
Se uma variável for definida, então ela será considerada um booleano com o valor "true". Se uma variável não for definida em nenhum lugar como uma habilidade ou configuração, ela será considerada um booleano com um valor "false".
As comparações não devem ser feitas em tipos de variáveis diferentes. Entretanto, essas comparações não interrompem o processo de construção. Se tipos de variáveis diferentes forem comparados, o pré-processador emite um aviso nas janelas do Editor e de Saída e avalia as expressões da seguinte maneira:
Há três tipos de operadores com prioridades diferentes:
Este operador tem a prioridade mais elevada e pode ser usado em variáveis e expressões com a sintaxe !<identificador>
ou !<expressão>
.
Por exemplo, //#if !(ScreenWidth>100 && ScreenHeight>120)
verifica se o tamanho da tela é menor que 100x120.
Como o operador !
tem a prioridade mais elevada, expressões como //#if !ScreenSize=="100x200"
são ilegais e geram erros de sintaxe porque um resultado booleano não pode ser comparado a uma string.
Os operadores de comparação possuem a segunda prioridade mais elevada e realizam operações de comparação típicas. Como os operadores podem comparar strings lexicalmente e inteiros matematicamente, há suporte para as comparações entre tipos diferentes. Entretanto, eles só podem ser usados em expressões e devem comparar duas variáveis, não símbolos.
Há também um operador de comparação especial que realiza uma operação de relação de "subconjunto". Esse operador é indicado pelo caractere @
. Os argumentos da esquerda e da direita devem ser strings que representam dois conjuntos de tokens delimitados por delimitadores específicos. O operador primeiro considera os argumentos de string da esquerda e da direita como conjuntos e depois determina se o conjunto do argumento da esquerda é um subconjunto do conjunto do argumento da direita. Os delimitadores de palavras válidos são <espaço em branco>,','
e ';'
. Os delimitadores podem ser misturados arbitrariamente em cada argumento, como mostrado nos exemplos a seguir.
"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
Os operadores booleanos possuem a prioridade mais baixa em relação aos operadores restantes. Eles também possuem prioridades diferentes entre si, assim como na linguagem Java. Os operadores booleanos realizam operações lógicas típicas como &&,
||
e ^
em resultados de expressão booleana ou verificam definições de variáveis e as tratam como expressões booleanas. Os operadores booleanos são processados nesta ordem:
&&