Я изучаю аннотации 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
}