C 中的 for 语法typedef
很奇特。你要做的是写一个普通的声明:
int x, *y, z[2];
然后typedef
在前面插入关键字。这告诉编译器,对于每个声明的变量,实际上并没有声明一个变量;相反,如果它是一个变量,则为该变量将具有的类型取一个新名称。所以:
typedef int x, *y, z[2];
为的x
别名int
、y
为 的别名int *
和z
为 的别名int [2]
。
如果你把typedef
原来的线去掉,你会得到:
void (LIBUSB_CALL *libusb_transfer_cb_fn)(struct libusb_transfer *transfer);
(仅当LIBUSB_CALL
是宏时才在语法上有效,可能是一些特定于编译器的修饰符,例如__stdcall
or __fastcall
),这已经有点奇怪了,因为 C 需要给指向函数的指针加上括号。但它会声明(并定义)libusb_transfer_cb_fn
为“指向函数的指针”类型的变量,该函数采用一个参数(传输的东西)并返回void
。因此为该类型typedef
创建了libusb_transfer_cb_fn
一个别名。
这个名字显然(嗯... :-) )的意思是:“传输操作后libusb的回调函数”。
这个想法是稍后的 C 代码可能会读到如下内容:
extern libusb_transfer_cb_fn abc_func;
它告诉你有一些abc_func
“指向 libusb 回调的指针”类型的全局变量,或者:
some_return_type xyz_func(libusb_transfer_cb_fn funcp, int a, char *b) {
struct libusb_transfer x;
... some code that fills in x ...
(*funcp)(&x);
}