在C中__in __out

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

我在C中看到了一个代码:

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

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

Solutions Collecting From Web of "在C中__in __out"

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

#define __in

#define __out

让你的程序编译。

也阅读文档。

__in__out是Microsoft的源代码注释语言或SAL的一部分 。

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

他们被微软工具用来分析你的代码中的简单错误。 你可以在这里看到大多数简单的原始注释:

  • _in

    该函数从缓冲区读取。 调用者提供缓冲区并初始化它。

  • _out

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

更复杂的注释可以在这里阅读,这是Windows 8开发人员应该坚持的。

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

 #define _in #define _out 

… 等等。