Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Стратегия без иллюзий: как превращать цели в результаты - 19.08

menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

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

12 Мар 2019

Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Ограничение количества выходов из цикла позволяет значительно снизить визуальную сложность кода.

Пример, на который анализатор выдаст предупреждение:

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

В следующем примере выход из цикла производится с помощью как 'break', так и '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:
    ...
}

Диагностическое правило классифицируется как:

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

Ты поймал бага за сек!
А мы в коде ловим их за доли секунды. Хочешь проверить?

Попробовать бесплатно