MISRA Discussion Forums
Rule 3-4-1 issues - Printable Version

+- MISRA Discussion Forums (https://forum.misra.org.uk)
+-- Forum: MISRA C++ (https://forum.misra.org.uk/forum-18.html)
+--- Forum: MISRA C++:2008 rules (https://forum.misra.org.uk/forum-19.html)
+---- Forum: 6.3 Basic concepts (C++) (https://forum.misra.org.uk/forum-132.html)
+---- Thread: Rule 3-4-1 issues (/thread-1122.html)



Rule 3-4-1 issues - CGeddes - 16-10-2014

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?


Re: Rule 3-4-1 issues - misra cpp - 11-10-2016

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;
    }
  }
}