Page 1 of 1

Rule 8.8 Does this apply to after pre-processing

Posted: Fri Feb 13, 2015 9:56 am
by misra-c
Is the following code compliant with rule 8.9 “An object should not be defined at block scope if its identifier only appears in a single function”?

Code: Select all

#define MACHINE1 0
int32_t x;   /* compliant or not? */ 

void fn1 ( void )
{
   x = 3;
}

int32_t fn2 ( void )
{
#if ( MACHINE1 )
   return x;
#else
   return 0;
#endif
}

Re: Rule 8.8 Does this apply to after pre-processing

Posted: Fri Feb 13, 2015 9:57 am
by misra-c
The MISRA guidelines define "code" in the Glossary as
Code consists of everything within a translation unit that is not excluded by conditional compilation.
Therefore, the guidelines apply to code after preprocessing directives have been executed, unless otherwise stated in a guideline.

In this example, “x” is excluded by the conditional compilation in “fn2” and therefore only appears in “fn1”. Hence the code is not compliant with rule 8.9.