minwindef.h中的IN和OUT宏

时间:2016-03-10 04:16:33

标签: c++ visual-c++

这些是在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)

这些宏有什么意义?为什么要用它来装饰参数?

2 个答案:

答案 0 :(得分:3)

这些宏可能被定义为与标准C和标准兼容的任何内容 C ++或它们可以定义为特定于MS的SAL (Microsoft source code annotation language) annotations 对于Annotating Function Parameters and Return Values,例如

popen

具有记录的含义:

  

_IN _

     

注释输入参数,这些参数是标量,结构,指向结构的指针等。明确地可以用在简单的标量上。该参数必须在预先状态下有效,不会被修改。

     

_out _

     

注释输出参数,这些参数是标量,结构,指向结构的指针等。不要将此应用于无法返回值的对象 - 例如,按值传递的标量。该参数不必在前置状态下有效,但必须在后置状态下有效。

当然,MS编译器会解析SAL注释。 MSDN Windows API文档 使用SAL注释for example

答案 1 :(得分:1)

从他们的定义中可以看出,这些宏没有任何功能用途。

它们仅用于文档目的,以指示函数的逻辑语义期望,例如,obj是" in"参数,而不是an "out" parameter

C# has actual keywords in and out,因此Windows代码可能包含这些等效的"一致性" ......但是,就我个人而言,我认为拥有等同物"实际上什么都不做,可能弊大于利。

但是,嘿,你是那个为微软工作的人,所以也许可以告诉我们。 :)