C and C++


LANG.PREPROC.RUNDEF : Macro Undefinition of Reserved Name

Summary

A macro is undefined (with #undef), and its name

This warning class is a strict subset of Use of #undef.

See also: Macro Definition of Reserved Name, Declaration of Reserved Name.

Properties

Class Name Macro Undefinition of Reserved Name
Significance style
Mnemonic LANG.PREPROC.RUNDEF
Categories
MisraC2023 MisraC2023:20.5 #undef should not be used
  MisraC2023:21.1 #define and #undef shall not be used on a reserved identifier or reserved macro name
Misra2012 Misra2012:20.5 #undef should not be used
  Misra2012:21.1 #define and #undef shall not be used on a reserved identifier or reserved macro name
Misra2004 Misra2004:19.6 #undef shall not be used
  Misra2004:20.1 Reserved identifiers, macros and functions in the standard library, shall not be defined, redefined or undefined
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:A17-0-1 Reserved identifiers, macros and functions in the C++ standard library shall not be defined, redefined or undefined.
MisraC++2008 MisraC++2008:16-0-3 #undef shall not be used.
  MisraC++2008:17-0-1 Reserved identifiers, macros and functions in the standard library shall not be defined, redefined or undefined.
JPL JPL:22 Do not undefine or redefine macros.
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 Undefinition of Reserved Name"

Example

#undef sprintf   /* 'Macro Undefinition of Reserved Name' warning issued here */

#undef NULL      /* 'Macro Undefinition of Reserved Name' warning issued here */

#undef _mymacro  /* 'Macro Undefinition of Reserved Name' warning issued here */

#undef mymacro                      /* not a reserved name */

Relevant Configuration File Parameters

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