MISRA.DEFINE.NOTGLOBALDefine is not at the global level. MISRA-C Rule 19.5 (required): Macros shall not be #define"™d or #undef"™d within a block.This rule is also covered by MISRA.UNDEF.NOTGLOBAL. While it is legal C to place #define or #undef directives anywhere in a code file, placing them inside blocks is misleading as it implies a scope restricted to that block, which is not the case. Normally, #define directives will be placed near the start of a file, before the first function definition. Normally, #undef directives will not be needed (see Rule 19.6). MISRA-C++ Rule 16-0-2 (required): Macros shall only be #define"™d or #undef"™d in the global namespace.This rule is also covered by MISRA.UNDEF.NOTGLOBAL. RationaleWhile it is legal to place #define or #undef directives anywhere in a source file, placing them outside of the global namespace is misleading as their scope is not restricted. This may be inconsistent with developer expectations. Example#ifndef MY_HDR #define MY_HDR // Compliant namespace NS { #define FOO // Non-compliant #undef FOO // Non-compliant } #endif |