警告 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;
}