C and C++


LANG.PREPROC.UNDEFINFN : Macro Undefined in Function Body

Summary

A macro is undefined (with #undef) inside the body of a function.

Properties

Class Name Macro Undefined in Function Body
Significance style
Mnemonic LANG.PREPROC.UNDEFINFN
Categories
Misra2004 Misra2004:19.5 Macros shall not be #define'd or #undef'd within a block
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
JPL JPL:21 Do not define macros within a function or a block.
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Macro Undefined in Function Body"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

#define CLEAR 1

int lang_preproc_undefinfn(void){
  /* 'Macro Undefined in Function Body' warning issued on following line */ 
#undef CLEAR
    return 0;
}

Relevant Configuration File Parameters

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