C and C++


LANG.PREPROC.NOFPAREN : Macro Parameter Not Parenthesized

Summary

The body of a function-like macro contains one or more non-parenthesized occurrences of a macro parameter.

Properties

Class Name Macro Parameter Not Parenthesized
Significance style
Mnemonic LANG.PREPROC.NOFPAREN
Categories
MisraC2023 MisraC2023:20.7 Expressions resulting from the expansion of macro parameters shall be enclosed in parentheses
Misra2012 Misra2012:20.7 Expressions resulting from the expansion of macro parameters shall be enclosed in parentheses
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.
  AUTOSARC++14:M16-0-6 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 ##.
MisraC++2008 MisraC++2008:16-0-6 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 ## .
MisraC++2023 MisraC++2023:19.3.4 Parentheses shall be used to ensure macro arguments are expanded appropriately
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 Parameter Not Parenthesized"

Example

#define M1( a, b ) ( a + b )              /* 'Macro Parameter Not Parenthesized' warning issued here
                                           * - 2 instances: one each for the unparenthesized uses of a and b
                                           */

#define M2( a, b ) ( ( a ) + ( b ) )                /* all occurrences of a and b in the body are parenthesized */

#define M3( a, b ) ( ( a ) + ( b ) + a )  /* 'Macro Parameter Not Parenthesized' warning issued here */

Relevant Configuration File Parameters

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