
...
This compliant solution follows the guidance of PRE00-C. Prefer inline or static functions to function-like macros by defining an inline function iabs()
to replace the ABS()
macro. Unlike the ABS()
macro, which operates on operands of any type, the iabs()
function will truncate arguments of types wider than int
whose value is not in range of the latter type.
...
Tool | Version | Checker | Description | |||||||
---|---|---|---|---|---|---|---|---|---|---|
Astrée |
| expanded-side-effect-multiplied | Partially checked | |||||||
Axivion Bauhaus Suite |
| CertC-PRE31 | Fully implemented | |||||||
CodeSonar |
| LANG.PREPROC.FUNCMACRO | Function-Like Macro | |||||||
| ASSERT_SIDE_EFFECTS | Partially implemented Can detect the specific instance where assertion contains an operation/function call that may have a side effect | ||||||||
Cppcheck Premium |
| premium-cert-pre31-c | Partially implemented Can detect side effects in arguments to unsafe macro | |||||||
ECLAIR |
| CC2.EXP31 CC2.PRE31 | Fully implemented | |||||||
Helix QAC |
| C3462, C3463, C3464,C3465,C3466,C3467 C++3225, C++3226, C++3227, C++3228, C++3229 | Fully implemented | |||||||
Klocwork |
| PORTING.VAR.EFFECTS | Fully implemented | |||||||
LDRA tool suite |
| 9 S, 562 S, 572 S, 35 D, 1 Q | Fully implemented | |||||||
Parasoft C/C++test |
| CERT_C-PRE31-b | Assertions should not contain assignments, increment, or decrement operators | |||||||
PC-lint Plus |
| 666, 2666 | Fully supported | |||||||
Polyspace Bug Finder |
| CERT C: Rule PRE31-C | Checks for side effect in arguments to unsafe macro (rule partially covered) | |||||||
RuleChecker |
| expanded-side-effect-multiplied | Partially checked |
...