我无法理解这种类型定义

I cannot understand this typedef

本文关键字:种类 类型 定义      更新时间:2023-10-16

我有这段代码:

typedef struct _tagCOMMUNICATIONOBJECT
{
  HWND  hWndClient;
  BOOL  bExitLoop;
  LONG  lSleepTimeout;
} COMMUNICATIONOBJECT, *PCOMMUNICATIONOBJECT;

我的理解是_tagCOMMUNICATIONOBJECT是具有 3 个公共成员 hWndClient 的结构,...我的问题:什么是COMMUNICATIONOBJECT和*PCOMMUNICATIONOBJECT?我不熟悉这种语法。

谢谢!

朱尔斯

这是Microsoft定义其大部分结构的旧方法。它适用于 C 和 C++。C++只要struct关键字后面的名称就足够了,因为它会自动键入这样的名称。

但为了更清楚,您可以重写如下:

struct _tagCOMMUNICATIONOBJECT
{
  HWND  hWndClient;
  BOOL  bExitLoop;
  LONG  lSleepTimeout;
};
typedef struct _tagCOMMUNICATIONOBJECT COMMUNICATIONOBJECT;
typedef struct _tagCOMMUNICATIONOBJECT *PCOMMUNICATIONOBJECT;

因此,在C++中,他们定义了3个名称:

_tagCOMMUNICATIONOBJECT
COMMUNICATIONOBJECT
PCOMMUNICATIONOBJECT
COMMUNICATIONOBJECT

typedef的名称,PCOMMUNICATIONOBJECT是指向此类typedef的指针。

通过将 typedef 放在 struct 之前,您可以定义结构,然后在定义后列出它的新别名。 COMMUNICATIONOBJECT_tagCOMMUNICATIONOBJECT 的新名称,PCOMMUNICATIONOBJECT 是指向结构的指针的新名称。它可以这样写:

struct _tagCOMMUNICATIONOBJECT
{
    HWND  hWndClient;
    BOOL  bExitLoop;
    LONG  lSleepTimeout;
};
typedef _tagCOMMUNICATIONOBJECT COMMUNICATIONOBJECT;
typedef _tagCOMMUNICATIONOBJECT *PCOMMUNICATIONOBJECT;