Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Failing to parenthesize the parameter names in a macro can result in unintended program behavior.

Recommendation

Severity

Likelihood

Remediation Cost

Priority

Level

PRE01-C

Medium

Probable

Low

P12

L1

Automated Detection

ToolVersionCheckerDescription
Astrée
Include Page
Astrée_V
Astrée_V
macro-parameter-parenthesesFully checked
Axivion Bauhaus Suite

Include Page
Axivion Bauhaus Suite_V
Axivion Bauhaus Suite_V

CertC-PRE01Fully implemented
ECLAIR
Include Page
ECLAIR_V
ECLAIR_V
CC2.PRE01Fully implemented
Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

C3410
Klocwork
Include Page
Klocwork_V
Klocwork_V
MISRA.DEFINE.NOPARS
 

LDRA tool suite
Include Page
LDRA_V
LDRA_V

78 S

Enhanced Enforcement

Parasoft C/C++test
9.5MISRA2004-19_10Fully implementedPRQA QA-C Include PagePRQA QA-C_vPRQA QA-C_v3410Fully implemented
Include Page
Parasoft_V
Parasoft_V
CERT_C-PRE01-a
In the definition of a function-like macro each instance of a parameter shall be enclosed in parentheses unless it is used as the operand of # or ##
PC-lint Plus

Include Page
PC-lint Plus_V
PC-lint Plus_V

9022

Fully supported

Polyspace Bug Finder

Include Page
Polyspace Bug Finder_V
Polyspace Bug Finder_V

CERT C: Rec. PRE01-CChecks for expanded macro parameters not enclosed in parentheses (rule partially supported)


PVS-Studio

Include Page
PVS-Studio_V
PVS-Studio_V

V733
RuleChecker
Include Page
RuleChecker_V
RuleChecker_V
macro-parameter-parenthesesFully checked

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

Related Guidelines

SEI CERT C++ Coding StandardVOID PRE01-CPP. Use parentheses within macros around parameter names
ISO/IEC TR 24772:2013Operator Precedence/Order of Evaluation [JCW]
Pre-processor Directives [NMP]
MISRA C:2012

Rule 20.7 (required)

Bibliography

[Plum 1985]
 

[Summit 2005]Question 10.1

...


...