[問題] typedef的應用

作者: zzss2003 (brotherD)   2018-06-27 18:17:34
圖: 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的前面吧?
謝謝各位
作者: LPH66 (-6.2598534e+18f)   2018-06-27 18:25:00
typedef 的解釋法很簡單, 把 typedef 拿掉看那是什麼變數如果那將某名字宣告為某型態, typedef 就是將此型態取此名你提的是函式指標的語法, 變數名不在最後面所以不易理解函式指標的名字會在 () 當中的 * 的後面
作者: bluesoul (忙死你老爸)   2018-06-27 18:36:00
iFloatLevel可以不用寫
作者: b0920075 (Void)   2018-06-27 18:48:00
function ptr的參數型態要寫吧
作者: chuegou (chuegou)   2018-06-27 19:09:00
就是把function pointer給個type 就醬
作者: loveflames (咕啾咕啾魔法陣)   2018-06-27 19:11:00
看到標題還以為是要問什麼時候該用typedef
作者: Neisseria (Neisseria)   2018-06-27 19:37:00
不算擴充型別吧,比較像是取別名,簡化型別命名
作者: sarafciel (Cattuz)   2018-06-27 20:04:00
這個東西叫函式指標 不是你理解的一般指向資料的指標函式指標大概是最常用typedef的東西之一 因為它的型態就是長這麼醜
作者: Killercat (殺人貓™)   2018-06-27 21:26:00
um, 這是函式指標,C++11以後別再用了 用std::function不過看了一下你code是c 那沒辦法 XDtypedef就是用一個好懂的type來取代難看的結構而已
作者: loveflames (咕啾咕啾魔法陣)   2018-06-27 21:58:00
在TMP有大用途
作者: remember (人老也有天使收)   2018-06-27 22:31:00
新的語法是 using callbsckfunc = void(*)(int)比較好懂吧https://en.cppreference.com/w/cpp/language/type_aliashttps://tinyurl.com/y9ao4j7a
作者: yvb   2018-06-27 22:58:00
typedef typeof(my_func) *my_func_t;改為 *my_func_ptr_t;其中my_func可在typedef前宣告,但不需實際存在該函式;比方寫 void my_func(int); 即可.此外, 用typeof()甚至可寫成 typeof(void(int)) 之類, 如typedef typeof(void(int)) *my_func_ptr_t;typedef typeof(void(*)(int)) my_func_ptr_t;均可.只不過 typeof() 非標準, 以上寫法只在 gcc 下試過.
作者: cphe (魔鬼藏在垃圾筒裡)   2018-06-28 02:21:00
Google “function pointer”,加typedef就當成固定用法要這樣寫

Links booklink

Contact Us: admin [ a t ] ucptt.com