2016-01-24 49 views
1

我有这样一段代码:我不明白这个的typedef

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

我明白这是_tagCOMMUNICATIONOBJECT的方式是,有3名公共成员hWndClient,... 我的问题结构:什么是CommunicationObject的和* PCOMMUNICATIONOBJECT ?我不熟悉这个语法。

谢谢!

回答

4

这是微软定义大部分结构的旧方法。它用C和C++工作。在C++中,struct关键字之后的名称就足够了,因为它会自动输入typedef的名称。

但使其更清晰,你可以重新写这样如下:

struct _tagCOMMUNICATIONOBJECT 
{ 
    HWND hWndClient; 
    BOOL bExitLoop; 
    LONG lSleepTimeout; 
}; 

typedef struct _tagCOMMUNICATIONOBJECT COMMUNICATIONOBJECT; 
typedef struct _tagCOMMUNICATIONOBJECT *PCOMMUNICATIONOBJECT; 

所以在C++中,他们确定3名:

_tagCOMMUNICATIONOBJECT 
COMMUNICATIONOBJECT 
PCOMMUNICATIONOBJECT 
+0

谢谢你,清楚! – Giuliano

0

COMMUNICATIONOBJECT是的typedef的名称和PCOMMUNICATIONOBJECT是指向这样一个typedef。

0

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

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