Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Rule 3-4-1 issues
#1
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?
<t></t>
Reply
#2
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;
    }
  }
}
Posted by and on behalf of
the MISRA C++ Working Group
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)