警告 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;
}
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈