DECLARE_HANDLE macro resolution

DECLARE_HANDLE macro resolution

In programs, we often see such statements:
DECLARE_HANDLE(HDRVR);
DECLARE_HANDLE(HDTRCV);
View DECLARE_HANDLE defined as follows:

#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

By default, VC/VS enables STRICT. In this case, it is equivalent to defining a structure first,
struct name##__
{
int unused;
}
and then typedef struct name##__ *name
is actually equivalent to defining A pointer to the structure name__
of type name. In the non-STRICT case, define name as HANDLE type. In fact, HANDLE is also a pointer type.
Then
DECLARE_HANDLE(HDRVR);
DECLARE_HANDLE(HDTRCV);
declares HDRVR and HDTRCV as a pointer type.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325988323&siteId=291194637