The C ISO Standard C99 defines octal constants as a 0 followed by octal digits (0 1 2 3 4 5 6 7).
This can lead to programming errors in constants that are meant to be taken by their decimal value, especially when declaring multiple constants and preserving fixed lengthwhen decimal values are mistakenly specified as octal constants.
Noncompliant code example
When using integer constants, for example, as in: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;
|
Wiki Markup |
---|
Although it may appear that that {{i_array\[2]\}} is assigned the decimal value 42 it is actually assigned the decimal value |
34. |
Compliant code example
To avoid using wrong values and make the code more readable, don't pad 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; |
Risk
...
Assessment
Misinterpreting decimal values as octal could lead to an incorrect value being written into codeincorrect comparisons and assignments.
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
DCL18-C | low | unlikely | low | P3 | L3 |
References
Wiki Markup |
---|
\[[ISO/IEC 9899:1999|cplusplus:AA. C References#ISO/IEC 9899-1999]\] Section 6.4.4.1 "Integer constants" \[MISRA 04\] Section 6.7 Rule 7.1 |
...