主要内容

MISRA C++:2023 Rule 5.13.4

Unsigned integer literals shall be appropriately suffixed

自 R2024b 起

描述

Unsigned integer literals shall be appropriately suffixed. 1

理由

常量的符号性由以下因素决定:

  • 常量的大小。

  • 整数类型的实现大小。

  • 常量的进制:八进制、十进制或十六进制。

  • 使用的任何后缀。

除非使用 uU 为无符号整数添加适当的后缀,否则您无法轻松识别一个常量是有符号的还是无符号的。

要正确检查是否违反此规则,您必须使用与编译器和目标相同的整数大小来配置静态分析工具。

Polyspace 实现

如果无符号八进制或十六进制常量没有后缀 U,则 Polyspace® 会报告违反此规则。

为了正确检查是否违反此规则,请指定您的编译器和目标。请参阅:

故障排除

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

示例

全部展开

在此示例中,无符号整数字面值 0x8000 没有后缀 U。此字面值在 32 位环境中是有符号的,但在 16 位环境中是无符号的。在 16 位环境中,这段代码违反了规则。要查看此违规,请将 -target 设置为 16 位处理器,例如 c-167


void foo ( )
{
auto a = 0U; // Compliant
auto b = 0x8000; //Noncompliant for a 16-bit processor
}

检查信息

组:词法规范
类别:必需
PQL 名称:std.misra_cpp_2023.R5_13_4

版本历史记录

在 R2024b 中推出


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.