这些是在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)
这些宏有什么意义?为什么要用它来装饰参数?
答案 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代码可能包含这些等效的"一致性" ......但是,就我个人而言,我认为拥有等同物"实际上什么都不做,可能弊大于利。
但是,嘿,你是那个为微软工作的人,所以也许你可以告诉我们。 :)