MISRA Discussion Forums

Full Version: Rule 3-4-1 issues
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
We're having issues complying with rule 3-4-1 in a number of functions that initialise a temporary variable which is subsequently modified and tested within a loop. I appreciate in many cases this can be resolved with recursion, however, it seems an excessive solution given the additional considerations required.

The only other solution we've found (that doesn't conflict with other rules) is to declare and initialise a struct with the members set to the required values. e.g.
Code:
void f (void)
{
    struct FOO
    {
        int Index;
        int Result;
    } ;
    
    for (FOO Test = {0, 0}; Test.Index < 10; Test.Index++)
    {
        Test.Result += SomeTestFunction( );
    
        if (Test.Result > 5)
        {
            break;
        }
    }
}
What is the an 'expected' implementation of such functionality?
This program is equivalent and compliant. Result has to be declared outside the loop, as the value in loop n+1 depends upon the value in loop n, so Result cannot be inside the body of the loop

Code:
void f ( void )
{
  int Result = 0;
  
  for ( int Index = 0; Index < 10; Index++ )
  {
    Result += SomeTestFunction( );
    
    if ( Result > 5 )
    {
      break;
    }
  }
}