代碼拆解
typedef struct _THREAD_CONTEXT {
CWorkQueue* pWorkQueue;
void* pThreadData;
} THREAD_CONTEXT, *PTHREAD_CONTEXT;
三個標識符含義
| 標識符 | 角色 | 說明 |
_THREAD_CONTEXT | 結構標籤 | 結構體的內部名稱,屬於「標籤名稱空間」,可用 struct _THREAD_CONTEXT 引用。 |
THREAD_CONTEXT | 類型別名 | typedef 引入的普通標識符,直接表示該結構類型,聲明變量時無需 struct 關鍵字。 |
PTHREAD_CONTEXT | 指針類型別名 | 指向該結構的指針類型,慣例以 P 前綴表示指針。 |
使用示例
// 1. 使用標籤名(需加 struct)
struct _THREAD_CONTEXT ctx1;
// 2. 使用類型別名(推薦)
THREAD_CONTEXT ctx2;
ctx2.pWorkQueue = queue;
ctx2.pThreadData = data;
// 3. 使用指針類型
PTHREAD_CONTEXT pCtx = &ctx2;
pCtx->pWorkQueue = anotherQueue;
// 4. 動態分配
PTHREAD_CONTEXT pNew = (PTHREAD_CONTEXT)malloc(sizeof(THREAD_CONTEXT));
注意事項
- C++ 中
struct _THREAD_CONTEXT { ... }; 已自動將 _THREAD_CONTEXT 注入普通名稱空間,typedef 主要為兼容 C 風格代碼。
- 指針類型別名便於統一代碼風格,但現代 C++ 傾向直接寫
THREAD_CONTEXT*,減少抽象層。
- 標籤名以下劃線開頭(
_THREAD_CONTEXT)在用戶代碼中屬保留名稱,建議改為 ThreadContextTag 等非保留形式。