[问题] 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