主要内容

MISRA C++:2008 Rule 2-13-3

R2026b

A "U" suffix shall be applied to all octal or hexadecimal integer literals of unsigned type

描述

A "U" suffix shall be applied to all octal or hexadecimal integer literals of unsigned type. 1

理由

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

  • 常量的值。

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

  • 各种类型的大小。

  • 使用的任何后缀。

除非您使用后缀 u 或 U,否则其他开发人员在查看您的代码时无法轻易判断一个常量是有符号的还是无符号的。

Polyspace 实现

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

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

故障排除

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

示例

全部展开

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

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

检查信息

组:词法规范
类别:必需

版本历史记录

在 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:2025

  • MISRA C++:2008

  • MISRA C++:2023

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