如果您將 MISRA C++ 設定及 MISRA C++ 類型新增至 Rational® Rhapsody® 模型,則您可以產生
MISRA C++ 相容程式碼。
關於這項作業
註: 對於與
MISRA/C++ 高度相容的架構,建議您使用簡化的 C++ 執行架構 (SXF)。
程序
- 若要將 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++ 類型。
- 使用 MISRA C++ 類型代替 C++ 基本類型,例如 int 及 char。
下一步
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++ 中,關係的預設可見性是專用的。
- 在沒有繼承的狀態圖中,現在屬性是專用的,並且定義為列舉。
- 在具有繼承的狀態圖中,屬性受保護且為整數,這不符合
MISRA。會發出 CG 警告,並且會將 LDRA 警告新增至程式碼。
- 對於 MISRA C++ 模型事件引數:
- 如果已勾選新增布林內容 CPP_CG:Event:GenerateArgumentsAsPrivate 後,引數的可見性值為專用。
- 對於所有模型,事件引數的註釋現在是 //##
auto_generated