作者zzss2003 (brotherD)
看板C_and_CPP
標題[問題] typedef的應用
時間Wed Jun 27 18:17:34 2018
圖:
https://imgur.com/a/lTOsLcB 我知道typedef是用來擴充原本的data type。比如:
typedef unsigned char bool; //bool = unsigned char
但在這張圖中:
typedef void (*V_FLOAT_CALLBACK) (int iFloatLevel);
我看不懂這邊為什麼要這樣寫,而且我也找不出它的規則
第二行的 static V_FOLAT_CALLBACK vFloatCallback = NULL;很明顯地告訴我們此type是
V_FLOAT_CALLBACK。加上有一個小v在variable前,我很合理地推斷出第一行應該是要寫:
typedef void (*V_FLOAT_CALLBACK)
所以第二行的原式應該為:
void *vFloatCallback = NULL;
Q1: 那第一行是打錯嗎?後面的int iFloatLevel是多寫的?
Q2: 為什麼在typedef那行要有括號的存在? 我知道括號的功能是要用來防止優先權亂掉,
但根本不會有operator在type的前面吧?
謝謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.156.33
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1530094656.A.04D.html
※ 編輯: zzss2003 (61.216.156.33), 06/27/2018 18:18:42
推 LPH66: typedef 的解釋法很簡單, 把 typedef 拿掉看那是什麼變數 06/27 18:25
→ LPH66: 如果那將某名字宣告為某型態, typedef 就是將此型態取此名 06/27 18:26
→ LPH66: 你提的是函式指標的語法, 變數名不在最後面所以不易理解 06/27 18:27
→ LPH66: 函式指標的名字會在 () 當中的 * 的後面 06/27 18:28
→ bluesoul: iFloatLevel可以不用寫 06/27 18:36
推 b0920075: function ptr的參數型態要寫吧 06/27 18:48
推 chuegou: 就是把function pointer給個type 就醬 06/27 19:09
→ loveflames: 看到標題還以為是要問什麼時候該用typedef 06/27 19:11
推 Neisseria: 不算擴充型別吧,比較像是取別名,簡化型別命名 06/27 19:37
→ sarafciel: 這個東西叫函式指標 不是你理解的一般指向資料的指標 06/27 20:04
→ sarafciel: 函式指標大概是最常用typedef的東西之一 因為它的型態 06/27 20:06
→ sarafciel: 就是長這麼醜 06/27 20:06
→ Killercat: um, 這是函式指標,C++11以後別再用了 用std::function 06/27 21:26
→ Killercat: 不過看了一下你code是c 那沒辦法 XD 06/27 21:26
→ Killercat: typedef就是用一個好懂的type來取代難看的結構而已 06/27 21:27
→ loveflames: 在TMP有大用途 06/27 21:58
推 remember: 新的語法是 using callbsckfunc = void(*)(int) 06/27 22:31
→ remember: 比較好懂吧 06/27 22:31
→ remember: s 06/27 22:33
推 yvb: typedef typeof(my_func) *my_func_t; 06/27 22:58
→ yvb: 改為 *my_func_ptr_t; 06/27 23:01
→ yvb: 其中my_func可在typedef前宣告,但不需實際存在該函式; 06/28 00:27
→ yvb: 比方寫 void my_func(int); 即可. 06/28 00:29
→ yvb: 此外, 用typeof()甚至可寫成 typeof(void(int)) 之類, 如 06/28 00:34
→ yvb: typedef typeof(void(int)) *my_func_ptr_t; 06/28 00:35
→ yvb: typedef typeof(void(*)(int)) my_func_ptr_t; 06/28 00:35
→ yvb: 均可. 06/28 00:35
→ yvb: 只不過 typeof() 非標準, 以上寫法只在 gcc 下試過. 06/28 00:42
推 cphe: Google “function pointer”,加typedef就當成固定用法要這 06/28 02:21
→ cphe: 樣寫 06/28 02:21
謝謝大家,已知用火
※ 編輯: zzss2003 (60.251.49.183), 06/28/2018 17:20:50