楼主:
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就当成固定用法要这样写