我刚看了VS2008中HRESULT
的定义。 WinNT.h有以下几行:
typedef __success(return >= 0) long HRESULT;
究竟是什么意思?对于我未经训练的眼睛,它甚至看起来不像C或C ++
答案 0 :(得分:6)
这是一个注释。简而言之,
__success(expr)
表示expr
描述了功能被认为成功的条件。对于返回HRESULT
的函数,该条件是返回值(因为HRESULT
是long
)是非负的。由于此HRESULT
,所有返回typedef
的函数都会将此注释应用于它们。
可能会在SAL Annotations,The Evolution of HRESULT From Win32和Success and Failure Annotations上的MSDN中获得比您想要的更多详细信息。
答案 1 :(得分:3)
此特定于MS的关键字适用于静态代码分析工具。
通过暗示如何检查函数的返回代码是否意味着它正确地完成了任务,它有所帮助。
答案 2 :(得分:0)
Windows API在这里使用宏黑魔法来创建自己的编程语言。你需要继续挖掘。
__成功定义为:
sal.h:
#define __success(expr) __inner_success(expr)
...而inner_success定义为:
#define __inner_success(expr)
......这没什么。所以HRESULT typedef简化为:
typedef long HRESULT;