PC Lint,错误 613 和 "complicated" 如果
PC Lint, err 613 and "complicated" if
int* ptrF();
void f()
{
int* p = ptrF();
bool pOK = p && true;
if (pOK)
*p = 12; // Lint thinks p might be nullptr here
}
Lint 发出警告
C:\lint_test\nullptr_with_init.cpp(8): Issue 613: (Warning -- Possible use of null pointer 'p' in argument to operator 'unary *' [Reference: file C:\lint_test\nullptr_with_init.cpp: line 6])
有谁知道是否有设置 使 Lint 更多 "clever" 并且如果 p == nullptr 则 pOK 不能为真?
这比像这样更改代码或抑制警告要好得多
*p = 12; //lint !e613
编辑:
是一个完全不同的问题。那是关于如何抑制警告的。
这是关于如何让 Lint 检查 "complicated" if 语句(如果可能)
在这种情况下,添加从指针到 bool 的转换似乎会有所帮助
bool pOK = (bool)p && true;
int* ptrF();
void f()
{
int* p = ptrF();
bool pOK = p && true;
if (pOK)
*p = 12; // Lint thinks p might be nullptr here
}
Lint 发出警告
C:\lint_test\nullptr_with_init.cpp(8): Issue 613: (Warning -- Possible use of null pointer 'p' in argument to operator 'unary *' [Reference: file C:\lint_test\nullptr_with_init.cpp: line 6])
有谁知道是否有设置 使 Lint 更多 "clever" 并且如果 p == nullptr 则 pOK 不能为真?
这比像这样更改代码或抑制警告要好得多
*p = 12; //lint !e613
编辑:
在这种情况下,添加从指针到 bool 的转换似乎会有所帮助
bool pOK = (bool)p && true;