__in __out __in_opt __allowed() 的目的是什么,它们是如何工作的?我应该在自己的代码中使用类似的构造吗?

StackOverflow https://stackoverflow.com/questions/4239809

  •  27-09-2019
  •  | 
  •  

其中一些预处理器定义位于 WinMain 函数和其他 Windows 库函数中。他们的目的是什么?它们如何工作?将它们写入您的实现或函数调用中是一个好习惯吗?

我的初步研究表明它们的设置相当于:

#define __in 
#define __out
#define __in_opt

这意味着它们被替换为 没有什么 在预处理器通道上。它们只是一种文档方法,没有任何功能吗?

如果是这样,我可以看到像这样在线记录代码的优点。对于像 doxygen 这样的东西,你需要写出参数名称两次。因此,理论上这可以帮助减少重复并保持一致性......

我没有理论如何 __allowed() 应该可以工作。

有帮助吗?

解决方案

它们在源代码注释语言SAL注释。微软工具依赖于它。在MSDN Library文章是这里。一个很好的例子是代码分析。另一相当无关的工具,但通过这些注解授权是PInvoke的互操作助手。

其他提示

SAL 注释有两个用途:

  • 通过 PREfast 进行静态分析(使用 /analyze 进行编译)
  • 人类读者可以查看注释并弄清楚应该如何调用函数,并快速确定输入/输出参数。

当您的代码通过分析进行编译时,这些宏实际上会扩展为各种 declspec 表达式。我在代码中一直使用这些注释。

他们在Microsoft语义分析工具,因为代码标记使用。除非你打算自己使用这个工具,几乎没有目的使用它们。

这些Microsoft宏普遍扩大到什么,意味着作为提示给读者。

然而,我最后一次检查例如在MessageBox参数的提示是完全错误的,暗示第一,第二和第三个参数进行了有益的默认值(如果指定0),而实际上它是可以使用默认值第一和第四个参数。也许还标题参数,默认为“错误”,但我从来没有发现有用的。所以,这只是一个微软的事,提示你不能和不应该依赖,随便误导视觉混乱。

干杯&第h。,

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top