Versions Compared

Key

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

...

Failing to parenthesize macro replacement lists can cause unexpected results.

Recommendation

Severity

Likelihood

Remediation Cost

Priority

Level

PRE02-C

Medium

Probable

Low

P12

L1

Automated Detection

ToolVersionCheckerDescription
Axivion Bauhaus Suite

Include Page
Axivion Bauhaus Suite_V
Axivion Bauhaus Suite_V

CertC-PRE02
CodeSonar
Include Page
CodeSonar_V
CodeSonar_V

LANG.PREPROC.MACROEND

LANG.PREPROC.MACROSTART

Macro Does Not End With ) or }

Macro Does Not Start With ( or {

ECLAIR

Include Page
ECLAIR_V
ECLAIR_V

CC2.PRE02

Fully implemented
Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

C3409
Klocwork
Include Page
Klocwork_V
Klocwork_V
MISRA.DEFINE.BADEXP
 

LDRA tool suite
Include Page
LDRA_V
LDRA_V

77 S

Fully implemented

Parasoft C/C++test
Include Page
c:
Parasoft_V
c:
Parasoft_V
MISRA-096Fully implementedPRQA QA-C Include PagePRQA QA-C_vPRQA QA-C_v3409
CERT_C-PRE02-a

Enclose in parentheses whole definition of a function-like macro

PC-lint Plus

Include Page
PC-lint Plus_V
PC-lint Plus_V

773, 973

Fully supported

Fully implemented

Related Vulnerabilities

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

Related Guidelines

SEI CERT C++ Coding StandardVOID PRE02-CPP. Macro replacement lists should be parenthesized
ISO/IEC TR 24772:2013Operator Precedence/Order of Evaluation [JCW]
Pre-processor Directives [NMP]

Bibliography

[Plum 1985]Rule 1-1
[Summit 2005]Question 10.1

...


...