想到微软的SAL(Source Annotation Language)是个好东西,研究了语言和注解属性的含义。
我有一个关于将 SAL 的“ Deref ”属性与“ int ”参数结合使用的一般性问题。让我用 isalpha() 函数的 SAL 来说明我的问题,该函数取自 ctype.h 包含文件,运行 Visual Studio 10:
[返回值:SA_Post(MustCheck=SA_Yes)] int __cdecl isalpha([SA_Pre(Null=SA_No)] [SA_Pre(Deref=1,Valid=SA_Yes,Access=SA_Read)] int _C);
如果单个参数 _C 是“ int ”,那么“[SA_Pre( Deref=1 ,Valid=SA_Yes,Access=SA_Read)]”是什么意思?如何以有意义的方式取消引用一次 int (Deref=1)?
我能想到的唯一解释是注释指出整数是对 ctype 内部字节数组的引用。静态分析器如何利用此注释?