minwindef.h中的IN和OUT宏
IN and OUT macros in minwindef.h
这些在minwindef.h(通常位于Program Files(x86(\Windows Kits\8.1\Include\shared\minwindef.h(中定义
#ifndef IN
#define IN
#endif
#ifndef OUT
#define OUT
#endif
我经常看到用这些宏装饰的参数,比如:
void SomeFunction(IN const MyClass& obj)
这些宏的意义是什么?为什么要用它来装饰参数?
为了与Standard C和Standard兼容,这些宏可能被定义为不包含任何内容C++,或者它们可以定义为特定于MS的SAL(Microsoft源代码注释语言(注释用于注释功能参数和返回值,例如
#define IN _In_
#define OUT _Out_
具有文档化的含义:
_In_
对标量、结构、指向结构的指针等输入参数进行注释。显式可以用于简单标量。参数必须在预状态下有效,并且不会被修改。
_Out_
对标量、结构、指向结构的指针等输出参数进行注释。不要将其应用于无法返回值的对象——例如,按值传递的标量。参数在前状态下不必有效,但在后状态下必须有效。
SAL注释当然是由MS编译器解析的。MSDN Windows API文档使用SAL注释,例如
从它们的定义中可以看出,这些宏没有任何功能用途。
它们仅用于文档目的,以表明函数的逻辑语义期望(例如(obj
是"in"参数,而不是"out"参数。
C#有实际的关键字in
和out
,所以Windows代码中可能包含了这些等价的"一致性"…不过,就我个人而言,我认为拥有实际上没有任何作用的"等价物"可能弊大于利。
但是,嘿,你是为微软工作的人,所以也许你可以告诉我们。:(
相关文章:
- IN, OUT, INOUT Parameters
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- "in"和"out"在参数方向上是什么意思?
- OpenGL, C++, In Out variables
- 从可变参数模板容器类中调用给定可变参数的 in 和 out 方法
- 解决方法:"out of line definition of 'graph' does not match any declaration in 'graph'"
- 数组未加载 - "index out of range in objectAtIndex()"
- "[ilink32] Fatal: Out of memory" in C++生成器
- 包装一个使用char**[in/out]的C函数调用,以在cython中返回一个python列表
- Doxygen@param direction arguments[in],[out],[in,out]示例输出
- 哪个 STL 类用于 Rand-In-First-Out-Buffer
- minwindef.h中的IN和OUT宏
- ctb::SerialPort - time-out in Write()
- 如何在IDL中声明IN、可选参数以及OUT、RETVAL参数
- 我如何将一个ease in out函数从c++翻译成python ?
- IN/OUT参数以及如何在c++中使用它们
- in vec和out vec是什么意思
- 如何在unix环境中使用.in和.out文件进行测试
- 对于封送数组,P/Invoke [In, Out]属性是可选的吗?