作者:
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:00typedef 的解釋法很簡單, 把 typedef 拿掉看那是什麼變數如果那將某名字宣告為某型態, typedef 就是將此型態取此名你提的是函式指標的語法, 變數名不在最後面所以不易理解函式指標的名字會在 () 當中的 * 的後面
作者:
bluesoul (å¿™æ»ä½ è€çˆ¸)
2018-06-27 18:36:00iFloatLevel可以不用寫
作者:
chuegou (chuegou)
2018-06-27 19:09:00就是把function pointer給個type 就醬
作者:
Neisseria (Neisseria)
2018-06-27 19:37:00不算擴充型別吧,比較像是取別名,簡化型別命名
這個東西叫函式指標 不是你理解的一般指向資料的指標函式指標大概是最常用typedef的東西之一 因為它的型態就是長這麼醜
um, 這是函式指標,C++11以後別再用了 用std::function不過看了一下你code是c 那沒辦法 XDtypedef就是用一個好懂的type來取代難看的結構而已
作者:
remember (人老也有天使收)
2018-06-27 22:31:00作者: 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:00Google “function pointer”,加typedef就當成固定用法要這樣寫