Page 1 of 1

Rule 3-4-1 issues

Posted: Thu Oct 16, 2014 2:22 pm
by CGeddes
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: Select all

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?

Re: Rule 3-4-1 issues

Posted: Tue Oct 11, 2016 10:25 am
by misra cpp
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: Select all

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