如标题中所问:
SAL(源注释语言)的目的是什么,SAL 1 和 SAL 2 有什么区别?
我了解使用的基础知识,这有助于突出传递给函数的每个变量的目的以及用于静态代码分析的各种其他内容,但它实际上有多大不同(忽略参数要求的日益清晰)项目中的其他程序员)?
如果我有以下原型:
_Success_(return == 1)
int TestFunction( _In_ int* pTest, _Inopt_ char* pOptional );
这应该“告诉”静态分析器该函数将在成功操作后返回 1,这pTest
是一个不能是的指针nullptr
,pOptional
也是一个可能是也可能不是的指针nullptr
。但是,静态分析器不能从函数定义本身获取这些信息吗?此外,它如何处理获得的信息,例如成功标准?
此外,为什么 SAL 1 和 SAL 2 之间存在差异,为什么微软决定改变他们命名宏的方式(即 from __out
to_Out_
和__success
to _Success_
?)
很抱歉,如果 MSDN 上某处对此进行了详细描述,但我无法在 StackOverflow 上找到它或任何其他问题的详细答案,所以我想我会问,希望能满足我的好奇心。
在此先感谢您的时间!