我无法理解这种typedef

时间:2016-01-24 03:38:01

标签: c++

我有这段代码:

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

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

谢谢!

3 个答案:

答案 0 :(得分:4)

这是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

答案 1 :(得分:0)

COMMUNICATIONOBJECT是typedef的名称,PCOMMUNICATIONOBJECT是指向这种typedef的指针。

答案 2 :(得分:0)

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

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