10

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

  • __in
  • __out
  • __in_opt
4

2 回答 2

13

这些是 Microsoft 的 SAL 注释中的一些较旧的装饰宏(较新的现在遵循不同的大小写,以大写字母开头)。这些对编译没有实际影响(在 VS 2010 下它们甚至没有扩展),它们用于内联 API 文档。

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

你可以在这里得到旧装饰品的完整解释。

于 2012-03-23T05:51:00.020 回答
8

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

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

于 2017-07-05T12:13:18.277 回答