2009-12-31 4 views
3

방금 ​​VS2008에서 HRESULT의 정의를 살펴 보았습니다. WinNT.h에는 다음 줄이 있습니다.HRESULT 선언/정의 설명

typedef __success(return >= 0) long HRESULT; 

정확히 무엇을 의미합니까? 훈련받지 않은 눈에 C 또는 C++처럼 보이지 않습니다.

답변

5

주석입니다. 간단히 말해,

__success(expr) 

은 기능이 성공한 것으로 간주되는 조건을 나타내는 것을 의미한다. HRESULT을 반환하는 함수의 경우 반환 값 (HRESULTlong이므로)은 음수가 아닙니다. HRESULT을 반환하는 모든 함수는이 typedef 때문에이 주석이 적용되었습니다.

아마도 MSDN에서 SAL Annotations, The Evolution of HRESULT From Win32Success and Failure Annotations에 대한 자세한 정보를 원할 것입니다.

0

Windows API는 여기에서 매크로 검은 마법을 사용하여 자체 프로그래밍 언어를 만듭니다. 파기를 계속해야했습니다.

__success는 다음과 같이 정의된다

sal.h :

#define __success(expr)      __inner_success(expr) 

... inner_success과 같이 정의된다 :

#define __inner_success(expr) 
...

뿐이다. 따라서 HRESULT typedef는 다음과 같이 줄어 듭니다.

typedef long HRESULT;