Rule 8.8 Does this apply to after pre-processing

Moderators: misra-c, david ward

Post Reply
misra-c
Posts: 572
Joined: Thu Jan 05, 2006 1:11 pm

Rule 8.8 Does this apply to after pre-processing

Post by misra-c » Fri Feb 13, 2015 9:56 am

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
}
---
Posted by and on behalf of
the MISRA C Working Group

misra-c
Posts: 572
Joined: Thu Jan 05, 2006 1:11 pm

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

Post by misra-c » Fri Feb 13, 2015 9:57 am

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.
---
Posted by and on behalf of
the MISRA C Working Group

Post Reply

Return to “8.8 Declarations and defnitions”