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

Loc*_*yer 17 c c++ com winmain

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

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

#define __in 
#define __out
#define __in_opt
Run Code Online (Sandbox Code Playgroud)

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

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

我没有关于如何__allowed()运作的理论.

Han*_*ant 24

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


wj3*_*j32 9

SAL注释对两件事很有用:

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

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


Pup*_*ppy 5

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