Immutable objects should be const
-qualified. Enforcing object immutability using const
- qualification helps ensure the correctness and security of applications. ISO/IEC TR 24772, for example, recommends labeling parameters as constant to avoid the unintentional modification of function arguments [ISO/IEC TR 24772]. STR05-C. Use pointers to const when referring to string literals describes a specialized case of this recommendation.
...
In this compliant solution, pi
is declared as a const
-qualified object.:
Code Block | ||||
---|---|---|---|---|
| ||||
const float pi = 3.14159f;
float degrees;
float radians;
/* ... */
radians = degrees * pi / 180;
|
Exceptions
DCL00-EX1: It is acceptable to define valueless macros to serve as "inclusion guards." That is, the macro serves to control the multiple inclusion of header files, as in the following example:
Code Block |
---|
#ifndef SOME_HEADER_H #define SOME_HEADER_H ... // content of header file #endif |
...
Risk Assessment
Failing to const
-qualify immutable objects can result in a constant being modified at runtime.
Recommendation | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
DCL00-C |
Low |
Unlikely |
High | P1 | L3 |
Automated Detection
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
Astrée |
| parameter-missing-const | Partially checked | ||||||
Axivion Bauhaus Suite |
| CertC-DCL00 | |||||||
CodeSonar |
| LANG.CAST.PC.CRCQ LANG.TYPE.VCBC LANG.STRUCT.RPNTC | Cast removes const qualifier Variable Could Be const Returned Pointer Not Treated as const | ||||||
Compass/ROSE |
| CC2.DCL00 | Partially implemented | |||||||
Helix QAC |
| C3204, C3227, C3232, C3673, C3677 |
LDRA tool suite |
| 78 D | Fully implemented | ||||||
Parasoft C/C++test |
| CERT_C-DCL00-a | Declare local variable as const whenever possible | ||||||
PC-lint Plus |
| 953 | Fully supported | ||||||
Polyspace Bug Finder |
| CERT C: DCL00-C | Checks for unmodified variable not const-qualified (rule fully covered). | ||||||
RuleChecker |
| parameter-missing-const | Partially checked |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
...
...
ISO/IEC 9899:2011 Section 6.7.3, "Type qualifiers"
Bibliography Bibliography
[Dewhurst 2002] | Gotcha #25, "#define Literals" |
[Saks 2000] |
...