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 | Detectable |
|---|
Repairable | Priority | Level |
|---|---|---|
DCL00-C |
Low | Unlikely |
Yes |
Yes |
P3 | 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 |
3204
3227
3232
| 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] |
...