You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 65 Current »

The C Standard defines octal constants as a 0 followed by octal digits (0 1 2 3 4 5 6 7). Programming errors can occur when decimal values are mistakenly specified as octal constants.

Noncompliant Code Example

In this noncompliant code example, a decimal constant is mistakenly prefaced with zeros so that all the constants are a fixed length:

i_array[0] = 2719;
i_array[1] = 4435;
i_array[2] = 0042;

Although it may appear that i_array[2] is assigned the decimal value 42, it is actually assigned the decimal value 34.

Compliant Solution

To avoid using wrong values and to make the code more readable, do not preface constants with zeroes if the value is meant to be decimal:

i_array[0] = 2719;
i_array[1] = 4435;
i_array[2] =   42;

Risk Assessment

Misrepresenting decimal values as octal can lead to incorrect comparisons and assignments.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

DCL18-C

Low

Unlikely

Low

P3

L3

Automated Detection

Tool

Version

Checker

Description

Astrée24.04octal-constantFully checked
Axivion Bauhaus Suite7.2.0CertC-DCL18
CodeSonar8.1p0LANG.TYPE.OCOctal constant
Helix QAC2024.3C0339, C1272
Klocwork2024.3MISRA.TOKEN.OCTAL.ESCAPE
MISRA.TOKEN.OCTAL.INT

LDRA tool suite 9.7.183 SFully Implemented
Parasoft C/C++test
2023.1

CERT_C-DCL18-a
CERT_C-DCL18-b

Octal and hexadecimal escape sequences shall be terminated
Octal constants (other than zero) shall not be used

PC-lint Plus

1.4

9001

Fully supported

Polyspace Bug Finder

R2024a

CERT C: Rec. DCL18-CChecks for use of octal constants (rec. fully covered)


PRQA QA-C
 
Unable to render {include} The included page could not be found.

0339
1272


PVS-Studio

7.33

V536
RuleChecker
24.04
octal-constantFully checked
SonarQube C/C++ Plugin
3.11
OctalConstantAndSequence

Related Guidelines

MISRA C:2012Rule 7.1 (required)




  • No labels