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; |
...
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 |
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
Bibliography
[Dewhurst 2002] | Gotcha #25, "#define Literals" |
[ |
Saks 2000] |
...
...