问题标签 [microsoft-sal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
777 浏览

windows - Microsoft SAL 注释 - 可选参数

在 winbase.h 中,DeviceIoControl 函数是这样定义的。

参数lpBytesReturned的注释定义为可选。
但如果调用者使用同步 I/O,则它不是可选参数。
如果调用者将 Null放入 lpBytesReturned并使用同步 I/O,则应用程序可能会死掉。

当我做一个函数时,我经常会遇到这个问题。
我不知道如何从 SAL 中表达这一点。

是否有注释来表达这一点?

PS如果可以的话,请制作SAL标签。SO中还没有标签。

0 投票
1 回答
2904 浏览

windows - __deref_out_opt 和 __deref_opt_out 有什么区别?

以下SAL注释有什么区别?

0 投票
1 回答
288 浏览

windows - Microsoft 的 SAL Deref=1 与“int”参数相关的属性?

想到微软的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 内部字节数组的引用。静态分析器如何利用此注释?

0 投票
2 回答
9800 浏览

visual-c++ - __in 、 __out 、 __in_opt 的含义

在函数参数中的变量之前使用的这些关键字是什么意思?

  • __in
  • __out
  • __in_opt
0 投票
3 回答
1479 浏览

c++ - 微软的源注释语言(SAL)——有什么方法可以利用它吗?

有什么方法可以利用 Microsoft 的 SAL,例如通过保留此信息的 C 解析器?还是由 Microsoft 制造,仅供 Microsoft 内部使用?

它对于很多任务都非常有用,例如为其他语言创建 C 库绑定。

0 投票
1 回答
3548 浏览

c++ - SAL(源注释语言)的目的是什么,SAL 1 和 2 有什么区别?

如标题中所问:

SAL(源注释语言)的目的是什么,SAL 1 和 SAL 2 有什么区别?

我了解使用的基础知识,这有助于突出传递给函数的每个变量的目的以及用于静态代码分析的各种其他内容,但它实际上有多大不同(忽略参数要求的日益清晰)项目中的其他程序员)?

如果我有以下原型:

这应该“告诉”静态分析器该函数将在成功操作后返回 1,这pTest是一个不能是的指针nullptrpOptional也是一个可能是也可能不是的指针nullptr。但是,静态分析器不能从函数定义本身获取这些信息吗?此外,它如何处理获得的信息,例如成功标准?

此外,为什么 SAL 1 和 SAL 2 之间存在差异,为什么微软决定改变他们命名宏的方式(即 from __outto_Out___successto _Success_?)

很抱歉,如果 MSDN 上某处对此进行了详细描述,但我无法在 StackOverflow 上找到它或任何其他问题的详细答案,所以我想我会问,希望能满足我的好奇心。

在此先感谢您的时间!

0 投票
3 回答
2996 浏览

sql - SQL 子查询连接和求和

我有表 1 和表 2,两者都有共同的列名 ID。

表 1 有重复的行条目,我可以使用以下方法进行修剪:

表 2 有我需要的 ID 的重复数字条目(dollarspent),并且能够总结:

-我需要将这两个查询合并为一个,这样我就得到了表 1 和表 2 ON 列 ID 的结果 JOIN,(a)表 1 中没有重复项和(b)表 2 中的总和 $ 值

例如:

注:表 1 和表 2 中的行数不相同。

谢谢

0 投票
1 回答
78 浏览

c++ - How to cause SAL compiler warnings in my own code using Visual C++ without running static code analysis

If I create a new console project in VS 2019 and add my own annotated implementation of printf and call both real printf and my version:

When I compile the file I see a compiler warning for the misuse of printf but not for the misuse of my_printf:

Now it is true that I can "Run Code Analysis on File (Ctrl+Shift+Alt+F7)" and that will give me code analysis warnings for both printf and my_printf in addition to the original compiler warning for printf:

But my question is this: is it possible to get the same compiler warning for my_printf that I get for printf without resorting to running a code-analysis? Turning on code-analysis for the huge project I'm on is not an option.