プリプロセッサは、3 つの型の変数をサポートしています。
変数と変数の間には、一般的な比較演算子 (<=、<、>=、>
、および ==
) を使用できます。
あらゆる種類の記号に対し、&&、||、!、^
などのブール演算を行うこともできます。
ブール演算では、整数は文字列と同じ働きをします。ただし、比較の際は真の整数として扱われます。これらは、さまざまな画面解像度があって、それぞれに最適化されたイメージが必要な場合に、コードの前処理などに使用できます。指令の例を次に示します。
//#if ScreenWidth>100 && ScreenHeight>120
画面サイズが 100 x 120 より大きいデバイスの場合にのみイメージをインポートするコードブロックを表していると考えられます。
変数が定義されている場合、その変数は、値が「真」のブール型とみなされます。変数がアビリティーまたは構成としてどこにも定義されていない場合、その変数は、値が「偽」のブール型とみなされます。
型の異なる変数同士を比較することはお勧めしません。ただし、そうした比較によって、構築プロセスが中止されることはありません。型の異なる変数同士を比較した場合、プリプロセッサによって「エディタ」ウィンドウと「出力」ウィンドウに警告が表示され、次のように式が評価されます。
優先順位の異なる 3 種類の演算子があります。
もっとも優先順位の高い演算子です。!<identifier>
または !<expression>
の構文で、変数および式に使用できます。
たとえば //#if !(ScreenWidth>100 && ScreenHeight>120)
は、画面サイズが 100 x 120 より小さいかどうかを検査します。
!
演算子の優先順位はもっとも高いため、//#if !ScreenSize=="100x200"
などの式は無効で、構文エラーになります。ブール演算結果を文字列と比較することができないからです。
比較演算子は 2 番目に優先順位が高く、一般的な比較演算を行います。文字列を文字比較、整数を算術比較できるため、異なる型を比較することができます。ただし、使用できるのは式内だけであり、記号ではなく、2 つの変数の比較である必要があります。
「部分集合」の関係演算を行う特殊な比較演算子もあります。この演算子は、文字 @
で表します。左右両辺の引数とも、専用のセパレータで区切られた 2 組のトークンを表す文字列であるべきです。この演算子はまず、左右両辺の文字列引数をそれぞれ集合とみなし、左辺の引数の集合が右辺の引数の集合の部分集合かどうかを判定します。有効な区切り文字は、空白文字、「,」、
および「;」
です。次の例に示すように、これらの区切り文字はそれぞれの引数内で自由に混在させることができます。
"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 言語と同様、ブール演算子内でも優先順位が決められています。ブール演算子は、ブール式の結果に対して && や ||
、^
などの一般的な論理演算を行なったり、変数定義の有無を検査して、それらもまたブール式として扱ったりします。ブール演算子は次の順序で処理されます。
&&