变量保存了一个必须检查的值
此警告指示调用函数未检查由函数提供的指定变量的值。 返回的值使用 _Check_return_
批注进行批注,但调用函数要么不使用该值,要么在不检查该值的情况下覆盖该值。
此警告类似于警告 C6031,但仅在代码不测试或检查变量的值(例如通过在比较中使用它)时才会报告该警告。 简单赋值的检查方法并不足以避免此警告。 对函数结果使用别名是一种足以避免警告的检查方法,但是应使用 _Check_return_
对结果本身进行批注。
某些函数(如 strlen
)几乎只为其返回值而存在,因此对其进行 _Check_return_
批注很有意义。 对于这些函数,如果其返回值未使用,代码分析工具可能会报告此警告。 此警告通常指示代码不正确,例如,它可能包含可以删除的残留代码。 但是,在某些罕见情况下,会故意不使用其返回值。 最常见的例子是,已返回字符串长度,但在进行其他测试之前,并未实际使用它。 其他测试导致要模拟的路径最终未使用该字符串长度。 发生这种情况时,代码可能正确,但效率可能不太高。
可以使用两个主要策略来处理这些未使用返回值的情况:
重新排序代码,以便字符串长度仅沿需要它的路径返回。
如果重新排序代码使代码过于复杂或不太有用,则使用 #pragma
警告来取消该警告。
示例
下面的代码示例将生成此警告:
IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
//...
下面的代码示例可避免此警告:
IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
//...
if (nMapRegs < MIN_REQUIRED_MAPS) {
//...
}