방금 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)
은 기능이 성공한 것으로 간주되는 조건을 나타내는 것을 의미한다. HRESULT
을 반환하는 함수의 경우 반환 값 (HRESULT
은 long
이므로)은 음수가 아닙니다. HRESULT
을 반환하는 모든 함수는이 typedef
때문에이 주석이 적용되었습니다.
아마도 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;
이 특정 키워드는 정적 코드 분석 도구 용입니다.
함수의 리턴 코드가 태스크를 올바르게 완료했는지 여부를 확인하는 방법에 대한 힌트가됩니다.
예를 들어, http://msdn.microsoft.com/en-us/library/aa468782.aspx