2007年4月16日 星期一

typedef的特殊用法

Question:
typedef void (*A)(B);
A C=D;
這樣子是把(*A)(B)定義為void嗎??


Answer:
這個叫做函式指標
一般在 typedef 時形式是這樣
typedef 回傳型態 (*定義名稱)(傳入型態1, 傳入型態2...)

所以你上面的「typedef void (*A)(B);」
當中的 B 應該是一種形態
這意思是說
「將一種指向不需要回傳(回傳型態是 void )
且需要傳入一個 B 型態(物件)作為參數的函式指標
稱之為 A 指標」

後面的「A C=D;」就是說
宣告一個 A(指標) ,名稱為 C
且將 D(函式的位址) 存入 C 當中

在使用時只要使用
C(傳入參數)即可
功能和 D(傳入參數) 是完全一樣的

範例:
typedef void (*HANDLE_LED_FUNC)(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState);
「將一種指向不需要回傳(回傳型態是 void )
且需要傳入一個
BOARD_LED_NAME ,BOARD_LED_STATE型態(物件)作為參數的函式指標
稱之為
HANDLE_LED_FUNC指標」


HANDLE_LED_FUNC gLedHwFunc[MAX_VIRT_LEDS];

宣告一個
HANDLE_LED_FUNC(指標) ,名稱為 gLedHwFunc
在使用時只要使用
gLedHwFunc(傳入參數)即可