Main Content

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

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

Description

Rule Definition

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

Rationale

The signedness of a constant is determined from:

  • Value of the constant.

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

  • Size of the various types.

  • Any suffixes used.

Unless you use a suffix u or U, another developer looking at your code cannot determine easily whether a constant is signed or unsigned.

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.

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

Check Information

Group: Lexical Conventions
Category: Required

Version History

Introduced in R2013b