[爆卦]函式指標用途是什麼?優點缺點精華區懶人包

為什麼這篇函式指標用途鄉民發文收入到精華區:因為在函式指標用途這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者zzss2003 (brotherD)看板C_and_CPP標題[問題] typedef的應用時...


圖: 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
remember: https://tinyurl.com/y9ao4j7a 06/27 22:34
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

你可能也想看看

搜尋相關網站