Main Content

MISRA C++:2023 Rule 5.13.4

Unsigned integer literals shall be appropriately suffixed

Since R2024b

Description

Rule Definition

Unsigned integer literals shall be appropriately suffixed.

Rationale

The signedness of a constant is determined from:

  • Magnitude of the constant.

  • The Implementation sizes of the integer types.

  • Base of the constant: octal, decimal or hexadecimal.

  • Any suffixes used.

Unless unsigned integer are appropriately suffixed using u or U, you cannot easily identify whether a constant is signed or unsigned.

To correctly check for violations of this rule, you must configure your static analysis tool using the same integer sizes as your compiler and target.

Polyspace Implementation

Polyspace® reports a violation of this rule if an unsigned octal or hexadecimal constant does not have the suffix U.

To check for violations of this rule correctly, specify your compiler and target. See:

Troubleshooting

If you expect a rule violation but Polyspace does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

In this example, the unsigned integer literal 0x8000 does not have the U suffix. This literal is signed in a 32-bit environment but unsigned in a 16-bit environment. In a 16-bit environment, this code violates the rule. To see this rule violation, set -target to a 16-bit processor, such as c-167.

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

Check Information

Group: Lexical Conventions
Category: Required

Version History

Introduced in R2024b