主要内容

AUTOSAR C++14 Rule M9-6-4

Named bit-fields with signed integer type shall have a length of more than one bit

描述

Named bit-fields with signed integer type shall have a length of more than one bit.

理由

长度为一位的有符号整数位字段类型变量的值可能不符合开发人员的预期。例如,固定宽度的有符号整数类型(如 std16_t)采用的是二进制补码表示法。在这种表示法中,单个位的变量仅包含符号位,变量值可能是 0 或 -1。

Polyspace 实现

该检查项会标记长度为 1 的有符号整数位字段类型的命名变量的声明。

不会标记长度为零的位字段类型。

故障排除

如果您预期会出现违规,而 Polyspace® 未报告该违规,请参阅诊断为何编码规范违规未按预期显示

示例

全部展开

#include <cstdint>

typedef struct
{
   std::uint16_t IOFlag :1;    //Compliant - unsigned type
   std::int16_t InterruptFlag :1; //Noncompliant
   std::int16_t Register1Flag :2; //Compliant - Length more than one bit
   std::int16_t : 1; //Compliant - Unnamed
   std::int16_t : 0; //Compliant - Unnamed
   std::uint16_t SetupFlag :1; //Compliant - unsigned type
} InterruptConfigbits_t;

在此示例中,只有第二个位字段声明不合规。一个命名变量被声明为长度为 1 位的有符号类型。

检查信息

组:
类别:必需、自动
PQL 名称:std.autosar_cpp14.M9_6_4

版本历史记录

在 R2020b 中推出