6

我只是看了HRESULTVS2008中的定义。WinNT.h 有以下行:

typedef __success(return >= 0) long HRESULT;

它到底是什么意思?在我未经训练的眼里,它甚至不像 C 或 C++

4

3 回答 3

8

它是一个注解。简而言之,

__success(expr)

表示expr描述一个函数被认为成功的条件。对于返回的函数HRESULT,该条件是返回值(因为HRESULT是 a long)是非负的。由于 this ,所有返回的函数HRESULT都应用了这个注解typedef

在 MSDN 中,关于SAL 注释HRESULT 从 Win32 的演变以及成功和失败注释的详细信息可能比您想要的要多得多。

于 2009-12-31T14:03:05.603 回答
4

这个特定于 MS 的关键字用于静态代码分析工具。

它通过提示如何检查函数的返回码是否意味着它正确完成了任务来提供帮助。

例如,请参阅http://msdn.microsoft.com/en-us/library/aa468782.aspx

于 2009-12-31T14:06:54.577 回答
2

Windows API 在这里使用宏黑魔法来创建自己的编程语言。你需要继续挖掘。

__success 定义为:

萨尔.h​​:

#define __success(expr)                     __inner_success(expr)

...并且 inner_success 定义为:

#define __inner_success(expr)

……没什么。因此 HRESULT typedef 简化为:

typedef long HRESULT;
于 2009-12-31T14:05:07.690 回答