...
Improper use of macros may result in undefined behavior.
Recommendation | Severity | Likelihood |
|---|
Detectable | Repairable | Priority | Level |
|---|---|---|---|
PRE00-C | Medium | Unlikely | No |
No |
P2 | L3 |
Automated Detection
| Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Astrée |
| macro-function-like | Fully checked | ||||||
| Axivion Bauhaus Suite |
| CertC-PRE00 | |||||||
| CodeSonar |
| LANG.PREPROC.FUNCMACRO | Function-Like Macro | ||||||
| Cppcheck Premium |
| premium-cert-pre00-c | |||||||
| CC2.PRE00 | Fully implemented | |||||||
| Helix QAC |
| C3453 | |||||||
| Klocwork |
| MISRA.DEFINE.FUNC |
| LDRA tool suite |
| 340 S | Enhanced enforcement | ||||||
| Parasoft C/C++test |
| CERT_C-PRE00-a | A function should be used in preference to a function-like macro | |||||||
| PC-lint Plus |
| 9026 | Assistance provided | ||||||
| Polyspace Bug Finder |
| CERT C: Rec. PRE00-C | Checks for use of function-like macro instead of function (rec. fully covered) |
| RuleChecker |
| macro-function-like function-like-macro-expansion | Fully checked | ||||||
| SonarQube C/C++ Plugin |
| S960 |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
| SEI CERT C++ Coding Standard | VOID PRE00-CPP. Avoid defining macros |
| ISO/IEC TR 24772:2013 | Pre-processor Directives [NMP] |
| MISRA C:2012 | Directive 4.9 (advisory) |
Bibliography
| [Dewhurst 2002] | Gotcha #26, "#define Pseudofunctions" |
| [FSF 2005] | Section 5.34, "An Inline Function Is as Fast as a Macro" |
| [Kettlewell 2003] |
| [Summit 2005] | Question 10.4 |
...
...