今天了解了GCC/Clang的这个小特性:
Something * MyFunctionThatNeverReturnsNULL() __attribute__((returns_nonnull))
{
// code here that will return a NULL value
static Something blah;
return &blah;
}
[...]
int main()
{
Something * s = MyFunctionThatNeverReturnsNULL();
if (s) // useful: compiler generates a warning here since this test will always return true!
{
// do something
}
else
{
// do something else
}
}
此功能很有用,因为如果我调用的代码错误地期望 NULL 返回值来指示失败,则
__attribute__((returns_nonnull))
注释允许编译器打印警告,以便我知道查看该代码并修复它。
我的问题是,MSVC 是否有类似/等效的东西,以便在 Windows 下编译时可能会生成相同类型的警告?
_Ret_notnull_
是您可以使用的标准 SAL Annotations 之一。
前向声明的示例:
#include <sal.h>
Ret_notnull_ Something* MyFunctionThatNeverReturnsNULL();
至于如何启用编译器或 prefast 工具来检测此类错误......让我回到我的办公桌上检查是否有有效的示例。我稍后会更新这个答案。