我只看了一下VS2008中HRESULT
的定義。 WinNT.h有以下行:解釋HRESULT的聲明/定義
typedef __success(return >= 0) long HRESULT;
究竟是什麼意思?它對我的未經訓練的眼睛甚至不像C或C++
我只看了一下VS2008中HRESULT
的定義。 WinNT.h有以下行:解釋HRESULT的聲明/定義
typedef __success(return >= 0) long HRESULT;
究竟是什麼意思?它對我的未經訓練的眼睛甚至不像C或C++
這是一個註釋。簡而言之,
__success(expr)
意味着expr
描述了功能被認爲已經成功的條件。對於返回HRESULT
的函數,該條件是返回值(因爲HRESULT
是long
)是非負數。由於此typedef
,所有返回HRESULT
的函數都應用了此註釋。
可能的方式更多的細節比你想要在MSDN上SAL Annotations,The Evolution of HRESULT From Win32和Success and Failure Annotations。
Windows API在這裏使用宏魔法來創建自己的編程語言。你需要繼續挖掘。
__success被定義爲:
sal.h:
#define __success(expr) __inner_success(expr)
...和inner_success被定義爲:
#define __inner_success(expr)
...這是什麼。因此,HRESULT typedef簡化爲:
typedef long HRESULT;
此特定於MS的關鍵字用於靜態代碼分析工具。
它通過提示如何檢查函數的返回碼是否意味着它正確完成任務有幫助。