主要内容

MISRA C++:2008 Rule 9-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. 1

理由

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

Polyspace 实现

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

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

故障排除

如果您预期会出现违规,而 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 位的有符号类型。

检查信息

组:
类别:必需

版本历史记录

在 R2013b 中推出


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.