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

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

我最初的研究表明,它们只是设置为:

#define __in #define __out #define __in_opt 

意味着它们在预处理器传递中没有被替换。 它们只是一种文档方法,没有任何function吗?

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

我没有关于__allowed()应该如何工作的理论。

它们是源代码注释语言中的SAL注释。 Microsoft工具依赖于它。 MSDN Library文章就在这里 。 代码分析就是一个很好的例子。 另一个非常不相关的工具,但由这些注释授权的是Pinvoke Interop助手。

SAL注释对两件事很有用:

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

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

它们在Microsoft语义分析工具中用作代码标记。 除非您打算自己使用此工具,否则使用它们的目的不大。

这些Microsoft宏通常会扩展为空,并且意味着向读者提示。

但是,上次检查时,例如对MessageBox参数的提示是完全错误的,暗示第一,第二和第三个参数有有用的默认值(当你指定0时),而实际上它是第一个和第四个参数,它们有有用的默认值。 也许标题参数默认为“错误”,但我从未发现它有用。 所以,它只是一个微软的东西,暗示你不能也不应该依赖,只是误导视觉混乱。

干杯&hth。,