C99 The C Standard defines octal constants as a 0 followed by octal digits (0 1 2 3 4 5 6 7). This can lead to programming errors Programming errors can occur when decimal values are mistakenly specified as octal constants.
...
In this noncompliant code example, a decimal constant is mistakenly prefaced with zeros so that all the constants are a fixed length.:
Code Block | ||||
---|---|---|---|---|
| ||||
i_array[0] = 2719;
i_array[1] = 4435;
i_array[2] = 0042;
|
...
Although it may appear that 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, don't do not preface constants with zeroes if the value is meant to be decimal.:
Code Block | ||||
---|---|---|---|---|
| ||||
i_array[0] = 2719;
i_array[1] = 4435;
i_array[2] = 42;
|
...
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 |
Related Guidelines
ISO/IEC 9899:1999 Section 6.4.4.1 "Integer constants"
MISRA Section 6.7 Rule 7.1
Bibliography
Automated Detection
Tool | Version | Checker | Description | ||||||
Astrée |
| octal-constant | Fully checked | ||||||
Axivion Bauhaus Suite |
| CertC-DCL18 | |||||||
CodeSonar |
| LANG.TYPE.OC | Octal constant | ||||||
Helix QAC |
| C0339, C1272 | |||||||
Klocwork |
| MISRA.TOKEN.OCTAL.ESCAPE MISRA.TOKEN.OCTAL.INT | |||||||
LDRA tool suite |
| 83 S | Fully Implemented | ||||||
Parasoft C/C++test |
| CERT_C-DCL18-a | Octal and hexadecimal escape sequences shall be terminated | ||||||
PC-lint Plus |
| 9001 | Fully supported | ||||||
Polyspace Bug Finder |
| CERT C: Rec. DCL18-C | Checks for use of octal constants (rec. fully covered) | ||||||
PVS-Studio |
| V536 | |||||||
RuleChecker |
| octal-constant | Fully checked | ||||||
SonarQube C/C++ Plugin |
| OctalConstantAndSequence |
Related Guidelines
MISRA C:2012 | Rule 7.1 (required) |
...
02. Declarations and Initialization (DCL) DCL19-C. Use as minimal a scope as possible for all variables and functions