Предупреждение C28196
Требование не удовлетворяется. (Выражение не оценивается как true.)
Это предупреждение означает, что анализируемая функция имеет __notnull
__null
__drv_valueIs
или аналогичную заметку для _Out_
параметра или возвращаемого значения, но возвращаемое значение не соответствует этой заметке.
Замечания
Заметки, такие как описание инвариантных _Out_
параметров и возвращаемых значений, которые служат как документацией, так __notnull
и в качестве проверка для автора функции. Предупреждение C28196 указывает на несоответствие между заметками и фактическим поведением функции. Предупреждение может быть полезно для обнаружения случаев, когда функция может вести себя неожиданно для определенных входных значений. Затем автору нужно решить, что такое предполагаемое поведение функции, а также адаптировать заметки или реализацию соответствующим образом.
Примеры
Следующая функция вызывает предупреждение C28196, так как оно аннотировано, _Ret_notnull_
даже если некоторые пути кода возвращают указатель null.
#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;
}
См. также
Аннотирование параметров функции и возвращаемых значений
Указание времени и места применения примечания\
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по