MISRA C++ 설정 및 MISRA C++ 유형을 IBM® Rational® Rhapsody®
모델에 추가하는 경우, MISRA C++ 준수 코드를 생성할 수 있습니다.
이 태스크 정보
주: MISRA/C++을 적극 준수하는 프레임워크의 경우, SXF(Simplified C++
Execution Framework)를 사용하는 것이 좋습니다.
프로시저
- MISRA C++ 설정 및 MISRA C++ 유형을 모델에 추가하려면
Rational Rhapsody for
C++에서 모델을 여십시오.
- 를 선택하고 <제품
설치 경로>\Share\Settings\MISRA로 이동하여
MISRAC++.sbs 파일을 선택하고 확인을 클릭하십시오.
이 설정은 Rational Rhapsody 코드
생성기가 MISRA C++를 준수하도록 하는 여러 특성을 모델에 추가합니다.
- 모델에 MISRA_Cpp_Types 패키지를 추가하려면 를 선택하고
<제품 설치 경로>\Share\LangCpp\oxf\model\oxf_rpy로 이동한 후
MISRA_Cpp_Types.sbs 파일을 선택한 다음 확인을 클릭하십시오.
이 패키지에는 MISRA C++ 유형이 있습니다.
- C++ 기본 유형(예: int 및 char)
대신 MISRA C++ 유형을 사용하십시오.
다음에 수행할 작업
Rational Rhapsody는 다음 MISRA C++ 규칙을 지원합니다.
- 7-1-1: 수정되지 않은 변수는 규정된 상수여야 합니다.
- 0-1-7: void가 아닌 리턴 유형의 함수(오버로드된 연산자가 아님)가
리턴한 값이 항상 사용되어야 합니다.
- 5-14-1: 논리 && 또는 ||
연산자의 오른쪽 피연산자는 부작용을 포함하지 말아야 합니다.
- 6-4-2: 모든 if...else는 else 절로
종료되어야 합니다.
- 5-0-2: 제한된 종속성을 표현식의 C++ 연산자 서열 규칙에
배치해야 합니다.
주: - MISRA C++ 규칙 5-2-4, 7-1-2 및 18-4-1을 위반하지 않으려면
포트를 사용하지 마십시오.
- MISRA C++ 규칙 18-4-1에 대해, 동적 힙 메모리 할당을 사용할 수 없습니다.
이벤트를 정적으로 작성한 후 send(&theEvent)로
이벤트를 보내어 동적 메모리 할당을 방지할 수 있습니다.
다음 특성의 값은 아래와 같습니다.
- CPP_CG::Argument::IsConst = True
- CPP_CG::Attribute::GenMutatorConstantArgument= True
- CG::Attribute/ Relation ::IsConst = SignatureAndReturnValue
다음 사항을 고려해야 합니다.
- 포트에서 새로 작성 또는 삭제를 사용하는 경우,
포트에 대한 모든 속성은 값으로 생성되므로 새로 작성 또는 삭제가
생성되지 않습니다.
- 프레임워크 변경사항:
OMEvent::isTypeOf had changed from
bool OMEvent::isTypeOf(IOxfEvent::ID eventId) const
bool OMEvent::isTypeOf(const IOxfEvent::ID eventId) const
프레임워크의
기본 클래스는 사용자 상속 전에 정의되므로 이는 해당 초기화입니다.
예를 들어, AcmeJet::AcmeJet(void)
: OMThread(), Jet() {. 기본 클래스 초기화는 기본적으로 일반 모델에 대해
설정 해제됩니다.
- MisraC++에서 관계의 기본 가시성은 private입니다.
- 상속이 없는 상태 차트에서 속성은 private이며 enum으로
정의됩니다.
- 상속이 있는 상태 차트에서 속성은 보호되고 정수로 정의되며,
MISRA 준수가 아닙니다. CG 경고가 발행되고,
LDRA 경고가 코드에 추가됩니다.
- MISRA C++ 모델 이벤트 인수의 경우:
- 검사 시 새 부울 특성을 CPP_CG:Event:GenerateArgumentsAsPrivate에
추가하면 인수 가시성이 private 값을 가집니다.
- 모든 모델의 경우, 이벤트 인수의 어노테이션은 이제 //##
auto_generated입니다.
제품에서 MISRA C++ 준수에 대한 자세한 정보는
Framework changes in version 7.5.2 및
Code generation changes in 7.5.3을 참조하십시오.