MISRA-C++:2008[8-4-3]: возврат по всему пути выхода в функции

При тестировании моего кода (статический анализ), чтобы увидеть, уважаю ли я misra C++ 2008, я получаю следующую ошибку

Функция не возвращает значение на всех путях.

Функция выглядит так

int* Dosomething(string v)
{
   int* retvalue = NULL;

   if( 0 == exists(v) )
   {
      throw("error: value doesn't exist");
   }
   else
   {
     retvalue = dosomecomputations(v);
   }

   return retvalue;
}

Мне действительно нужно выдать исключение, потому что в зависимости от ошибки вызывающий должен что-то сделать. Возможный список ошибок может быть большим, и дело не только в том, что значение не существует, как в этом примере кода.

Как мне это сделать? Я думаю, что в этом случае используемый мной инструмент не должен воспринимать его как несоответствие Мисре.

Спасибо за ваш совет.

Рони.

1 ответ

Решение

Следующий код не должен сообщать о каких-либо предупреждениях / ошибках с применением правил MISRA C++ 2008. Так что, скорее всего, это проблема вашего инструмента - или опубликованный код не является уязвимой частью.

#include <string>

int exists(std::string v){ (void)v; return 1; }
int* dosomecomputations(std::string v){ (void)v; return NULL; }

int* dosomething(std::string v){
  int* retvalue = NULL;
  if( 0 == exists(v) ){
    throw("error: value doesn't exist");
  }else{
    retvalue = dosomecomputations(v);
  }
  return retvalue;
}

Попробуйте проверить только приведенный выше фрагмент с помощью своей программы проверки MISRA и посмотрите, сообщает ли он еще. Если проблема не устраняется, я бы просто связался с поставщиком инструментов и спросил его об этой проблеме.

Другие вопросы по тегам