我很难解释以下C代码:
static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])(
const Netdev *netdev,
const char *name,
NetClientState *peer, Error **errp) = {
[NET_CLIENT_DRIVER_NIC] = net_init_nic,
#ifdef CONFIG_SLIRP
[NET_CLIENT_DRIVER_USER] = net_init_slirp,
#endif
[NET_CLIENT_DRIVER_TAP] = net_init_tap,
[NET_CLIENT_DRIVER_SOCKET] = net_init_socket,
#ifdef CONFIG_VDE
[NET_CLIENT_DRIVER_VDE] = net_init_vde,
#endif
#ifdef CONFIG_NETMAP
[NET_CLIENT_DRIVER_NETMAP] = net_init_netmap,
#endif
#ifdef CONFIG_NET_BRIDGE
[NET_CLIENT_DRIVER_BRIDGE] = net_init_bridge,
#endif
[NET_CLIENT_DRIVER_HUBPORT] = net_init_hubport,
#ifdef CONFIG_VHOST_NET_USER
[NET_CLIENT_DRIVER_VHOST_USER] = net_init_vhost_user,
#endif
#ifdef CONFIG_L2TPV3
[NET_CLIENT_DRIVER_L2TPV3] = net_init_l2tpv3,
#endif
};
这看起来像一个函数指针声明,但是它做了我不认识的= {...}
。也在里面做[]
。
这到底是什么?
发布于 2020-04-13 05:26:01
使用类型别名可能更容易理解:
// Define a type-alias for a pointer to a function
typedef int (*net_client_init_fun_type)(const Netdev *, const char *, NetClientState *, Error **);
// Define an array of pointers to functions
static net_client_init_fun_type net_client_init_fun[NET_CLIENT_DRIVER__MAX] = { ... }
它仍然需要有关函数指针以及如何声明/定义它们的知识,但它将使数组声明更易于阅读。
数组初始化列表使用指定的数组初始化。
当你有这样的台词时:
[NET_CLIENT_DRIVER_NIC] = net_init_nic
在数组初始化列表中,这意味着数组的索引NET_CLIENT_DRIVER_NIC
将初始化为net_init_nic
。
https://stackoverflow.com/questions/61181946
复制相似问题