조건부 특성

조건부 특성을 사용하여 다른 특성에 따라 평가되는 조건식으로 특성에 대한 값을 정의할 수 있습니다. 즉, 특성 값이 다른 특성 값에 따라 달라집니다.

조건부 특성 기능은 MicroC, AR3x_BMT 및 AutomotiveC 프로파일로 작성된 제품의 출하 시 사용할 수 있습니다. IBM® Rational® Rhapsody®에서 다른 프로젝트와 함께 이 기능을 사용하려면 site.prp 파일에 General::Project::ConditionalPropertyPrefix 특성을 추가합니다. ConditionalPropertyPrefix 특성은 이 기능을 활성화하는 메커니즘입니다. site.prp 파일에 대한 자세한 내용은 site.prp 파일 수정의 내용을 참조하십시오.

조건부 특성 사용

다음 예에서는 이러한 특성이 설명을 위해서만 사용되며 제품에 포함되어 있지 않습니다.
  • CG::Class::PrefixCode
  • CG::Class::ClassCompilationFlag

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도 조건식입니다.

표현식의 조건 파트에서 다음 키워드 중 하나를 사용하여 추가 복합 조건식을 작성합니다.

?<==> (equals), ?<!=> (not equals), ?<&&> (and), ?<||> (or),

다음 예에서 조건식의 키워드는 굵은체 유형과 기울임체 유형입니다. 조건식의 연산자는 굵은체이고 토큰은 기울임체입니다.

?<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>과 같은 하나의 토큰만 사용하는 경우 제품에서 토큰을 전체 경로에 대한 바로 가기로 처리합니다. 즉, $<CG::<Environment>::Property-Name>입니다. 여기서 <Environment>설정 탭에서 활성 구성에 대해 선택한 환경의 이름입니다.

이 예에서 CG 토큰은 컴포넌트의 상대 언어에 따라 C_CGCPP_CG로 바뀝니다.

특성 정의의 모든 $<token>은 참조된 특성의 값(전체 경로 또는 바로 가기)이나 참조된 특성이 없는 경우 빈 문자열로 바뀝니다.

피드백