我最近正在查看一些由于-Wtautological-pointer-compare.
代码可以简化为:
void foo(const char*s) __attribute__((nonnull)) {
if (s) { /* Test added just in case*/
if (s[0]=='a') s[0]='b'; /* Dummy code using the pointer */
}
}
显然,如果我们信任这些属性,则s不能为空,并且警告是多余的。但是,对我来说,最好在函数中处理 null-case(因为我们不能相信调用代码是用这些警告编译的,或者人们会阅读警告)——同时仍然检测代码中的其他空指针问题。
因此禁用此警告(对整个函数使用编译指示)似乎不是最佳选择。
在带有 SAL 的 Visual Studio 中,您似乎可以使用它_In_ _Pre_defensive_来处理这种情况。
在这种情况下,
_In_ _Pre_defensive_首选在信任边界处指示虽然调用者在尝试传递 NULL 时会收到错误,但函数体将被分析为参数可能为 NULL,并且任何取消引用指针的尝试没有先检查它是否为 NULL 将被标记。
铿锵有类似的可能吗?