【问题标题】:how to suppress the coverity warning "CHECKED_RETURN" [closed]如何抑制覆盖警告“CHECKED_RETURN”[关闭]
【发布时间】:2016-01-25 09:35:39
【问题描述】:

以下代码

TRACE_SEND_SIG(pOutSig, sender((void *) &pSig),"IPOM_DHCP_IF_UNSUBSCRIBE_RSP");

send((void *) &pOutSig, sender((void *) &pSig));

Coverity 发出错误:

打电话send((void *)&pOutSig, sender((void *)&pSig)) 没有 检查返回值。此库函数可能会失败并返回 错误代码。

在上面的代码上下文中,有意不检查send 的返回值。我怎样才能抑制这个错误。

【问题讨论】:

  • 避免警告通常不是一个好主意。
  • 正如它所说,不要忽略返回码:res = send((void *) &pOutSig, sender((void *) &pSig));
  • 请不要破坏您的帖子。
  • Coverity 在 AST(抽象语法树)级别工作,无法避免此错误。即使通过另一个答案中提到的技巧。您可以尝试在 send 调用之前的一行中通过代码注释 /*coverity[check_return] */ 在覆盖率报告中抑制它。注意:抑制覆盖仅意味着将错误标记为故意的。它仍会显示在问题列表中,但状态为已关闭(有意)。

标签: c coverity


【解决方案1】:

要么检查返回值。

if (send((void *) &pOutSig, sender((void *) &pSig) == -1)
{
     /*  whatever action is needed */
}

如果您真的不想检查该值,请将其转换为 void

(void)send((void *) &pOutSig, sender((void *) &pSig);

这告诉编译器丢弃返回值。它还告诉其他程序员 - 以及隐蔽性 - 你故意丢弃返回值,而不是让问题悬而未决你是否打算这样做。

如果TRACE_SEND_SIG() 是一个宏,您需要相应地修改它以执行上述操作之一。

【讨论】:

  • 这个技巧只能避免编译器警告。 Coverity 在 AST 级别上工作,并且仍会报告它。它只能被分类为有意或被代码注释 /*coverity[check_return] */ 抑制。
猜你喜欢
  • 2019-12-22
  • 2015-12-14
  • 2015-08-27
  • 2019-02-25
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多