我正在学习SAL注释,我在Visual Studio 2017中测试了此示例。
我认为当我将NULL指针传递给InCallee
时,编译器将报告警告或错误,但是它仍然可以正确构建。所以我的问题是SAL是否像代码注释一样,并且不会验证合法性数据,还是可以检查数据,仅仅是因为我做错了什么?
void InCallee(_In_ int *pInt) //_In_ is allowed to be NULL
{
int i = *pInt;
}
void GoodInCaller()
{
int *pInt = new int;
*pInt = 5;
InCallee(pInt);
delete pInt;
}
void BadInCaller()
{
int *pInt = NULL;
InCallee(pInt); // pInt should not be NULL
}