При тестировании моего кода (статический анализ), чтобы увидеть, уважаю ли я 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;
}
Мне действительно нужно выдать исключение, потому что в зависимости от ошибки вызывающий должен что-то сделать. Возможный список ошибок может быть большим, и дело не только в том, что значение не существует, как в этом примере кода.
Как мне это сделать? Я думаю, что в этом случае используемый мной инструмент не должен воспринимать его как несоответствие Мисре.
Спасибо за ваш совет.
Рони.
Следующий код не должен сообщать о каких-либо предупреждениях / ошибках с применением правил 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 и посмотрите, сообщает ли он еще. Если проблема не устраняется, я бы просто связался с поставщиком инструментов и спросил его об этой проблеме.
Других решений пока нет …