警告 C28196

未达到要求。 (表达式的计算结果不为 true。)

此警告指示所分析的函数具有基于 _Out_ 参数或返回值的 __notnull__null__drv_valueIs 或类似注释,但返回的值与该参数不一致。

备注

__notnull 之类的注释描述了有关 _Out_ 参数和返回值的不变量,它既用作文档,又供函数的作者来检查完整性。 警告 C28196 表示注释与函数的实际行为不匹配。 要发现函数在某些输入值上可能出现意外行为的情况,此警告非常有用。 然后由作者决定函数的预期行为,并相应地调整注释或实现。

示例

以下函数会导致警告 C28196,因为即使某些代码路径返回空指针,也会对其进行注释 _Ret_notnull_

#include <sal.h>

_Ret_notnull_
Item *get_item(_In_reads_(len) Item *items, size_t len, size_t index) {
    if (index >= len) {
        return nullptr;
    }

    return items + index;
}

要解决此问题,请调整批注,使其准确反映函数的行为。

#include <sal.h>

_When_(index < len, _Ret_notnull_)
Item *get_item(_In_reads_(len) Item *items, size_t len, size_t index) {
    if (index >= len) {
        return nullptr;
    }

    return items + index;
}

另请参阅

对函数参数和返回值进行批注
指定何时以及在何处应用批注\