我刚刚查看了VS2008中HRESULT的定义。WinNT.h包含以下行:
typedef __success(return >= 0) long HRESULT;这到底是什么意思?在我未经训练的眼睛看来,它甚至不像C或C++
发布于 2009-12-31 22:03:06
它是一个注解。总之,
__success(expr)表示expr描述了函数被视为已成功的条件。对于返回HRESULT的函数,条件是返回值(因为HRESULT是long)是非负的。由于这个typedef,所有返回HRESULT的函数都应用了这个注释。
可能比你在SAL Annotations,The Evolution of HRESULT From Win32和Success and Failure Annotations上的MSDN中想要的更详细。
发布于 2009-12-31 22:06:55
这个特定于MS的关键字用于静态代码分析工具。
它通过提示如何检查函数的返回码是否意味着它正确地完成了任务来提供帮助。
例如,请参见http://msdn.microsoft.com/en-us/library/aa468782.aspx
发布于 2009-12-31 22:05:08
Windows API在这里使用宏黑魔法来创建自己的编程语言。你需要继续挖掘。
__success定义为:
sal.h:
#define __success(expr) __inner_success(expr)...and inner_success定义为:
#define __inner_success(expr)...which什么都不是。因此,HRESULT类型定义函数简化为:
typedef long HRESULT;https://stackoverflow.com/questions/1985521
复制相似问题