我正在使用函数指针数组,并且我想直接将其与关联的事件 ID 一起使用。 问题是,事件 ID 从 0x10 到 0x1C,从 0x90 到 0xA5。
我不想在开头写十个NULL元素,是否可以以某种方式这样声明:
int (*tab[256])(uint8_t *data, int *datalen) = {
NULL[10],
fun1,
[...],
funx,
NULL[116],
...
};
目前,我没有看到令人满意的解决方案,这就是我问的原因
您可以在标准 C 中使用指定的初始化器来完成此操作:
int (*tab[256])(uint8_t *data, int *datalen) = {
[0xf] = NULL,
fun_a_1,
...
fun_a_n,
[0x8f] = NULL,
fun_b_1,
...
};
语法
[n] = x
将数组的第 n 个元素设置为给定值。我们用它来设置最后一个 NULL 元素来设置初始化列表的“当前对象”。然后在给定对象之后按顺序设置后续的初始化程序。我们还可以利用未显式初始化的数组元素被设置为 NULL
这一事实。因此在上面的示例中,元素 0xf 被显式设置为 NULL
。然后,初始化器列表中的下一个对象应用于元素 0x10,下一个对象应用于 0x11,依此类推。