允许生成符合 MISRA C++ 标准的代码

如果对 IBM® Rational® Rhapsody® 模型添加了 MISRA C++ 设置和 MISRA C++ 类型,那么可以生成符合 MISRA C++ 标准的代码。

关于此任务

注: 对于高度符合 MISRA/C++ 标准的框架,建议您使用简化 C++ 执行框架 (SXF)。

过程

  1. 要对模型添加 MISRA C++ 设置和 MISRA C++ 类型,请在 Rational Rhapsody for C++ 中打开该模型。
  2. 选择文件 > 添加到模型,转到 <product installation path>\Share\Settings\MISRA,选择 MISRAC++.sbs 文件,然后单击确定。这些设置将对模型添加多个属性,以使 Rational Rhapsody 代码生成器符合 MISRA C++ 标准。
  3. 要对模型添加 MISRA_Cpp_Types 程序包,请选择文件 > 添加到模型,转到 <product installation path>\Share\LangCpp\oxf\model\oxf_rpy,选择 MISRA_Cpp_Types.sbs 文件,然后单击确定。此程序包包含 MISRA C++ 类型。
  4. 使用 MISRA C++ 类型代替 C++ 基本类型(例如 intchar)。

下一步做什么

Rational Rhapsody 支持下列 MISRA C++ 规则:
  • 7-1-1:必须使用 constant 来限定未修改的变量
  • 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
您需要注意:
  • 要在端口中使用 newdelete,为端口生成的所有属性都通过值生成,因此不生成 newdelete
  • 框架更改:
    OMEvent::isTypeOf 已由
    bool OMEvent::isTypeOf(IOxfEvent::ID eventId) const 更改为
    bool OMEvent::isTypeOf(const IOxfEvent::ID eventId) const

    由于框架的基类是在用户继承之前定义的,因此它们的初始化也是如此。例如,AcmeJet::AcmeJet(void) : OMThread(), Jet() {。对于常规模型,基类初始化在缺省情况下处于关闭状态。

  • 在 Misra C++ 中,关系的缺省可视性是私有。
  • 在不具有继承的状态图 中,属性现在是私有属性并定义为枚举
  • 在具有继承的状态图中,属性受保护并定义为整数,这不符合 MISRA 标准。在这种情况下,将发出 CG 警告并在代码中添加 LDRA 警告。
  • 对于 MISRA C++ 模型事件自变量:
    • 添加了新的 Boolean 属性 CPP_CG:Event:GenerateArgumentsAsPrivate,如果此属性设置为 Checked,那么自变量的可视性值为 private
    • 对于所有模型,事件的自变量的注释现在是 //## auto_generated

有关产品中的 MISRA C++ 一致性的更多信息,请参阅 Framework changes in version 7.5.2Code generation changes in 7.5.3


反馈