C and C++


LANG.PREPROC.PASTEHASH : ## Follows # Operator

Summary

An application of the # operator in a macro definition is immediately followed by an application of the ## operator.

The # and ## operators will also trigger Macro Uses # Operator and Macro Uses ## Operator warnings, respectively (if these classes are enabled).

Properties

Class Name ## Follows # Operator
Significance style
Mnemonic LANG.PREPROC.PASTEHASH
Categories
MisraC2023 MisraC2023:20.11 A macro parameter immediately following a # operator shall not immediately be followed by a ## operator
Misra2012 Misra2012:20.11 A macro parameter immediately following a # operator shall not immediately be followed by a ## operator
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-3-1 There shall be at most one occurrence of the # or ## operators in a single macro definition.
MisraC++2023 MisraC++2023:19.3.2 A macro parameter immediately following a # operator shall not immediately be followed by a ## operator
CWE CWE:710 Improper Adherence to Coding Standards
CERT-C CERT-C:PRE30-C Do not create a universal character name through concatenation
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="## Follows # Operator"

Example

#define A( x, y ) #x ## y  /* '## Follows # Operator' warning issued here.
                            * (also 'Macro Uses # Operator' and
                            * 'Macro Uses ## Operator' warnings, when enabled)
                            */


#define B( x, y ) #x x+y ## y         /* ## does not directly follow #.
                                       * ('Macro Uses # Operator' and
                                       * 'Macro Uses ## Operator' warnings only, when enabled)
                                       */

Relevant Configuration File Parameters

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