DECLARE_HANDLE 宏解析
在程式中,經常看到這樣的語句:
DECLARE_HANDLE(HDRVR);
DECLARE_HANDLE(HDTRCV);
檢視DECLARE_HANDLE定義如下:
#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; };
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name #endif
預設情況下,VC/VS是開啟STRICT的,在這種情況下相當于先定義了一個結構,
struct name##__
{
int unused;
}
再typedef struct name##__ *name
其實就相當于定義了一個指向結構體name__
的指針類型name。 在非STRICT的情況下,定義name 為HANDLE類型。其實HANDLE 也是一個指針類型。
則
DECLARE_HANDLE(HDRVR);
DECLARE_HANDLE(HDTRCV);
是聲明HDRVR和HDTRCV 為一個指針類型。