close
希臘語翻譯

參考


  1. en.wikipedia.org typedef
  2. blog.sina.com.cn typedef的四个用途和两大圈套
  3. pixnet.net/blog C 說話:輕鬆讀懂複雜的界說 (Define and Read the complex declarations)
  4. 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);