參考
- en.wikipedia.org typedef
- blog.sina.com.cn typedef的四个用途和两大圈套
- pixnet.net/blog C 說話:輕鬆讀懂複雜的界說 (Define and Read the complex declarations)
- Declaring, Assigning, and Using Function Pointers
再來看一些用 typedef 轉換化簡的例子: from blog.sina.com.cn typedef的四个用途和两大陷阱
覺得很費勁看不下去了嗎? 先讀一下這一篇 C 說話:輕鬆讀懂複雜的界說 (Define and Read the complex declarations)
void (*signal(int sig, void (*func)(int)))(int); // 轉換成下面的模樣 typedef void (*sighandler_t)(int); sighandler_t signal(int sig, sighandler_t func);
// Wrong definition: typedef char * pstr; mystrcmp(const pstr, const pstr); // Correct definition: typedef const char * cpstr; mystrcmp(cpstr, cpstr);
接著, 我們進一步加一些轉變
// 原始寫法: doube(*)() (*e)[9]; // 轉換為: typedef double (*pFuny)(); // 左半部 typedef pFuny (*pFunParamy)[9]; // 右半部 pFunParamy e;
函數指標最常見的應用是利用在 callback 的手藝上. 由於需要將某一函數的位址當做參數傳送給另外一個函數, 是以使用 typedef 替這種 callback 函數的指標界說一個新名字 (新資料型態)翻譯社 可以大幅提昇程式的可讀性, 往後保護及點竄上比力不會犯錯.
enum color { black, white翻譯社 gold, pink }; typedef enum color iPhoneColor; iPhoneColor x = gold;
再下來是陣列 array 的例子:
typedef int (*MathFunc)(float, int); int do_math(float arg1, int arg2) { return arg2; } int call_a_func(MathFunc call_this) { int output = call_this(5.5翻譯社 7); return output; } int final_result = call_a_func(&do_math);
留言列表