共用方式為


警告 C28196

不符合需求。 (運算式未評估為 true。)

這個警告表示所分析的函式在參數或傳回值上 _Out_ 具有 __notnull__null __drv_valueIs 或類似的注釋,但傳回的值與該批註不一致。

備註

例如 __notnull 描述參數和傳回值的不因數 _Out_ ,這既可作為檔,又做為函式作者的理智檢查。 警告 C28196 表示批註與函式的實際行為不符。 警告對於探索函式在特定輸入值上可能會非預期的行為案例很有用。 然後由作者決定函式的預期行為,並據以調整注釋或實作。

範例

下列函式會造成警告 C28196,因為即使某些程式碼路徑傳回 Null 指標,也會加上 _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;
}

另請參閱

批註函式參數和傳回值
指定套用註釋的時機和位置\