啟用產生 MISRA C++ 相容程式碼

如果您將 MISRA C++ 設定及 MISRA C++ 類型新增至 IBM® Rational® Rhapsody® 模型,則您可以產生 MISRA C++ 相容程式碼。

關於這項作業

註: 對於與 MISRA/C++ 高度相容的架構,建議您使用簡化的 C++ 執行架構 (SXF)。

程序

  1. 若要將 MISRA C++ 設定及 MISRA C++ 類型新增至模型,請在 Rational Rhapsody for C++ 中開啟您的模型。
  2. 選取檔案 > 新增至模型,移至<產品安裝路徑>\Share\Settings\MISRA,選取 MISRAC++.sbs 檔,然後按一下確定。這些設定會將一些內容新增至模型,使 Rational Rhapsody 程式碼產生器 MISRA C++ 相容。
  3. 若要將 MISRA_Cpp_Types 套件新增至模型,請選取檔案 > 新增至模型、移至<產品安裝路徑>\Share\LangCpp\oxf\model\oxf_rpy、選取 MISRA_Cpp_Types.sbs 檔案,然後按一下確定。 此套件包含 MISRA C++ 類型。
  4. 使用 MISRA C++ 類型代替 C++ 基本類型,例如 intchar

下一步

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

如需產品中 MISRA C++ 相容性的相關資訊,請參閱Framework changes in version 7.5.2Code generation changes in 7.5.3


回饋