【发布时间】:2013-12-23 20:57:19
【问题描述】:
在测试我的代码(静态分析)以查看我是否尊重 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。
感谢您的建议。
罗尼。
【问题讨论】:
-
您使用的是哪个 MISRA 检查器(QAC?PClint?...)?在我看来,您发布的 sn-p 并不违反规则 8-4-3
-
看起来像工具的一个错误
-
@constantin,我正在使用 ldra
-
尝试在投掷后添加虚假回报。也尝试删除
else。 -
出于好奇,如果您使用的是现代静态分析器,那么您为什么要使用模糊的“尤达条件”编写代码?
0 == exists(v)而不是exists(v) == 0?这种编写代码的方式是在《星球大战》电影上映时由车库黑客发明的。它在 1990 年左右变得过时了,当时即使是最糟糕的编译器也设法警告不要在条件内进行赋值。对于现代静态分析仪来说,发现这样的错误将是在公园里散步。这是 30 年的代码吗?