C and C++


LANG.PREPROC.MACROEND : Macro Does Not End With } or )

Summary

A macro definition does not end with a ) or } character.

Checks for this warning class examine all macro definitions, including those in regions that are excluded by preprocessor directives.

Properties

Class Name Macro Does Not End With } or )
Significance style
Mnemonic LANG.PREPROC.MACROEND
Categories
AUTOSARC++14 AUTOSARC++14:A16-0-1 The pre-processor shall only be used for unconditional and conditional file inclusion and include guards, and using the following directives: (1) #ifndef, (2) #ifdef, (3) #if, (4) #if defined, (5) #elif, (6) #else, (7) #define, (8) #endif, (9) #include.
CWE CWE:710 Improper Adherence to Coding Standards
CERT-C CERT-C:PRE02-C Macro replacement lists should be parenthesized
  CERT-C:PRE11-C Do not conclude macro definitions with a semicolon
POW10 POW10:8 Limit the use of the preprocessor to file inclusion and simple macros.
JPL JPL:20 Make only very limited use of the C pre-processor.
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default. To enable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += allow class="Macro Does Not End With } or )"

Example

/* 'Macro Does Not End With } or )' warning issued on following line */
#define XFIVE(a) \
    (a) * 5

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.