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

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

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

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

Рони.

4

Решение

Следующий код не должен сообщать о каких-либо предупреждениях / ошибках с применением правил 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 и посмотрите, сообщает ли он еще. Если проблема не устраняется, я бы просто связался с поставщиком инструментов и спросил его об этой проблеме.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]