2016-01-24 78 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;