【发布时间】:2018-01-06 17:10:41
【问题描述】:
对于下面的sn-p:
size_t i = 0;
std::wstring s;
s = (i < 0) ? L"ABC" : L"DEF";
s = (i != -1) ? L"ABC" : L"DEF";
PVS-Studio 分析记录第一个条件 i < 0 的警告,如预期的那样:
V547Expression 'i < 0' is always false. Unsigned type value is never < 0. test_cpp_vs2017.cpp 19
例如,为什么 PVS 不发出任何关于第二个、也是可疑情况 i != -1 的警告总是如此?
【问题讨论】:
-
@JeffUK 不,它不会单独警告
i != -1 -
好的,viva64.com/en/w/V3022 这篇文章似乎很好地解释了它,当它说“分析器不会警告每一个总是正确或错误的条件;它只会在错误高度严重时诊断这些情况很有可能。”
-
@JeffUK,条件
i != -1不总是正确的! -
@JanHudec 我不同意,它不像
i<0那样固有 false,但此代码的静态分析表明i在发生此检查时始终为0,因此@ 987654331@ 在代码中此时是多余的。 PVS-Studio 只是选择只警告前者而不是后者。 -
奇怪的是,当
i是size_t时i < 0永远不会为真,而当i是size_t时i <= -1将永远为真。
标签: c++ static-analysis unsigned pvs-studio