前言 :
很多寫 C/C++ 的人都把 typedef 當成#define 來使用. 直覺像這樣的定義 :
- typedef unsigned short WORD;
- #define WORD unsigned short
- #define max(a,b) (((a) > (b)) ? (a) : (b))
- typedef Hello! WORD;
使用範例 :
- 簡單型態的別名
這三行沒什麼大不了,用#define也可以做 :
- typedef unsigned char BYTE;//定義無號單字節的型態
- typedef unsigned short WORD;//定義無號雙字節的型態
- typedef unsigned long DWORD;//定義無號四字節的型態
- typedef struct StructTag{
- int mA;
- int mB;
- }STRUCTTAG, *PSTRUCTTAG;
- STRUCTTAG StructObj;
- PSTRUCTTAG pStructObj;
- struct StructTag StructObj;
- struct StructTag *pStructObj;
如果你有一個 library 提供了字串轉整數的函式 :
- int HexToInt(char *str);//十六進位字串轉整數
- int DecToInt(char *str);//十進位字串轉整數
- typedef int ToInt(char *str);
- //上面這行定義了一個需傳入字串(char *)且返回整數(int)的函式型態別名
- //叫 ToInt
- ToInt HexToInt,DecToInt;//宣告HexToInt,DecToInt這兩個函式
在Windows,通常是應用程式呼叫API來工作的,但由於某種需求,Windows API 會反過來呼叫應用程式的函式,這種函式稱之為 callback function. callback function 對API來說只有該傳入那些參數和返回值型態,沒有函式名稱而用函式指標來呼叫(事實上Windows也不可能用程式的函式名稱來呼叫). 這時使用函式型態的別名來宣告函式指標就特別好用了. 舉個例子吧!建立一個新的行程(Thread)的函式 :
其中 LPTHREAD_START_ROUTINE 就是一個函式型態的別名. 它的定義是 :
- typedef DWORD (__stdcall *LPTHREAD_START_ROUTINE) (
- [in] LPVOID lpThreadParameter
- );
補充說明 :
* [C++ 文章收集] C++ 前置處理器
* [ C Gossip ] 函式 : 進階議題 (函 式指標)
沒有留言:
張貼留言