Our website uses cookies to enhance your browsing experience.
Accept
to the top
>
>
>
V2530. MISRA. Any loop should be...
menu mobile close menu
Additional information
toggle menu Contents

V2530. MISRA. Any loop should be terminated with no more than one 'break' or 'goto' statement.

Mar 12 2019

This diagnostic rule is based on the software development guidelines developed by MISRA (Motor Industry Software Reliability Association).

The limitation of the number of loop exit points allows significantly reducing visual complexity of the code.

Here's an example which triggers this warning:

int V2534_pos_1(vector<int> ivec)
{
  int sum = 0;
  for (auto i = ivec.cbegin(); i != ivec.cend(); ++i)
  {
    if (*i < 0)
      break;

    sum += *i;

    if (sum > 42)
      break;
  }

  return sum;
}

In the following example, the loop is exited via both 'break', and 'goto':

short V2534_pos_2(string str)
{
  short count = 0;
  for (auto &c : str)
  {
    if (isalnum(c))
    {
      count++;
    }
    else if (isspace(c))
    {
      break;
    }
    else
    {
      goto error;
    }
  }
  
  return count;

error:
    ...
}

This diagnostic is classified as:

  • MISRA-C-2012-15.4
  • MISRA-C-2023-15.4
  • MISRA-CPP-2008-6.6.4