__in,__ out,__ in_opt的含义

Zcu*_*ube 6 visual-c++ microsoft-sal

在函数参数中的变量之前使用这些关键字的含义是什么?

  • __in
  • __out
  • __in_opt

Nec*_*lis 10

这些是来自微软SAL Annotations的一些较旧的装饰宏(现在较新的装饰宏是按照不同的外壳,从首都开始).这些对编译没有实际影响(在VS 2010下它们甚至没有扩展),它们用于内联API文档.

  1. __in:此参数是函数的输入(只读,调用者已初始化).
  2. __out:此参数包含函数返回时的输出(只写,调用者初始化).
  3. __in_opt:由_in和形成的复合注释_opt,_opt指示参数是可选的,并且可以设置为默认值(通常NULL).

你可以在这里得到了充分的解释旧的装饰品在这里.


Aja*_*jay 7

正如 Nercolis 所回答的,这些是 SAL 注释属性。但是,这些不仅仅是内部的或仅用于API 文档的。真正的目的是为了代码分析。当您使用/analyze编译器选项(项目属性,代码分析 -> 常规)构建项目时,这些在查找编码问题方面起着重要作用。

例如,如果一个特定的指针参数说,__in那么它不能被传递一个空指针。该函数不会检查 null 并可能导致 SEH。__in_opt参数可能为空。当编译器发现一些问题时,它会将其报告为警告。请参阅这篇文章