MicroC、AR3x_BMT、および AutomotiveC の各プロファイルを使用して作成されたプロジェクトの場合、追加設定なしで条件付きプロパティー機能を使用できます。 IBM® Rational® Rhapsody® のこれ以外のプロジェクトでこの機能を使用する場合は、General::Project::ConditionalPropertyPrefix プロパティーを site.prp ファイルに追加できます。ConditionalPropertyPrefix プロパティーは、この機能をアクティブにするメカニズムです。site.prp ファイルの詳細については、site.prp ファイルの変更を参照してください。
CG::Class::PrefixCode に、#define $<CG::Class::ClassCompilationFlag> という値を入力できます。 これは、CG::Class::PrefixCode の値は、CG::Class::ClassCompilationFlag の値に基づいていることを意味します。
#define が空にならないように、プロパティーを設定して、CG::Class::ClassCompilationFlag の値が空ストリングでない場合のみに使用するようにする必要があります。条件付きで CG::Class::PrefixCode を定義する必要があります。次の例を参照してください。
この例では、条件式のキーワードは太字体で示されています。
?<begin> $<CG::Class::ClassCompilationFlag> ?<!=>?<?>#define $<CG::Class::ClassCompilationFlag>?<:>?<end>
この式は、CG::Class::ClassCompilationFlag の値が空ストリングでない場合、プロパティーの値は、#define $<CG::Class::ClassCompilationFlag> であることを意味します。それ以外の場合、値は空ストリングです。
条件式のテンプレートは、C 言語および C++ 言語における条件付き代入と似ています。
(Condition ? True-Part : False-Part)
プロパティー定義の場合、テンプレートは次のようになります。
?<begin> Condition?<?>True-Part?<:>False-Part?<end>
定義により柔軟性を持たせるために、条件式の各要素 (True-Part または False-Part) は再帰的です。つまり、各要素が条件式であってもかまいません。
次の例では、条件式のキーワードには太字体とイタリックがあります。条件式の演算子は太字体で、トークンはイタリックで示されています。
?<begin> Condition1?<?>?<begin> Condition2?<?>True-Part2 ?<:>False-Part2?<end>?<:>False-Part1?<end>
True-Part2、False-Part2、および False-Part1 も、条件式にすることもできます。
式の条件部分に次のいずれかのキーワードを使用すれば、より複雑な条件式を作成できます。
?<==> (等号)、?<!=> (不等号)、?<&&> (かつ)、?<||> (または)
次の例では、条件式のキーワードには太字体とイタリックがあります。条件式の演算子は太字体で、トークンはイタリックで示されています。
?<begin> $<CG::Class::ClassCompilationFlag> ?<!=>FLAG1 ?<&&> $<CG::Class::ClassCompilationFlag ?<!=>FLAG2 ?<||>
$<CG::Class::ClassCompilationFlag> ?<!=>FLAG3 ?<?>#define $<CG::Class::ClassCompilationFlag>?<:> /*No Compilation Flag for this class */?<end>
条件式としてプロパティーの値を評価するには、プロパティーに接頭部を追加する必要があります。接頭部は、プロジェクト・レベル でのみ General::Project::ConditionalPropertyPrefix プロパティーに定義できます。MicroC プロファイルの場合、このプロパティーのデフォルト値は ?<IsConditionalProperty> です。次の例のように、?<IsConditionalProperty> トークンは、評価後プロパティーの値から消去されます。
?<IsConditionalProperty>?<begin> $<CG::Class::ClassCompilationFlag> ?<!=>?<?>#define $<CG::Class::ClassCompilationFlag>?<:>?<end>
この例では、プロパティー値は条件式として評価されます。評価される条件式は、次のようになります。
?<begin> $<CG::Class::ClassCompilationFlag> ?<!=>?<?>#define $<CG::Class::ClassCompilationFlag>?<:>?<end>
これらの例ではすべて、プロパティーの絶対パス、つまり $<Subject::Meta-Class::Property-Name> が使用されます。
例えば、$<Property-Name> というトークンを 1 つだけ使用する場合、この製品では、そのトークンを絶対パス、つまり $<CG::<Environment>::Property-Name> のショートカットとして扱います。ここで、<Environment> は、アクティブ構成の「設定」タブで選択された環境の名前です。
CG トークンは、コンポーネントの関連言語に応じて置換されます。この例では、C_CG、CPP_CG に置換されます。
プロパティー定義のすべての $<token> は、参照されているプロパティーの値 (絶対パスまたはショートカット) または空ストリング (参照プロパティーが見つからない場合) のいずれかに置換されます。