4

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

我在下面看到了一个 C 代码:

DWORD  GetFileVer(__in LPTSTR FileName, __out LPTSTR lpVersion, __in DWORD nSize)
{
...
}

我试图编译它但失败了。谁能告诉我是什么__in意思__out?我咨询了 MSDN,但找不到任何有用的信息。谢谢。

4

2 回答 2

6

__in并且__outMicrosoft源代码注释语言(SAL ) 的一部分。

通过使用源代码注释,您可以明确代码背后的意图。这些注释还使自动化静态分析工具能够更准确地分析您的代码,显着减少误报和漏报。

Microsoft 工具使用它们来分析代码中的简单错误。您可以在此处查看标题中使用的大多数简单原始注释:

  • _in

    该函数从缓冲区中读取。调用者提供缓冲区并对其进行初始化。

...

  • _out

    该函数写入缓冲区。如果用于返回值或 with _deref,则该函数提供缓冲区并对其进行初始化。否则,调用者提供缓冲区并且函数对其进行初始化。

可以在此处阅读更复杂的注释,这是建议 Windows 8 开发人员坚持的内容。

正如詹姆斯指出的那样,您可以只使用预处理器定义来忽略它们:

#define _in 
#define _out

... 等等。

于 2012-09-04T01:46:53.633 回答
1

他们在那里告诉程序员如何使用参数。__in表示参数是只读的,即调用者不会看到对它的任何更改,__out表示参数由函数填充,数据由调用者使用。你可以做

#define __in

#define __out

让你的程序编译。

也阅读文档。

于 2012-09-04T01:36:54.337 回答