C语言语法问题(嵌入式)

/* Externs for the required functions */
#define BCM_DLIST_ENTRY(_dtype) \
extern int bcm_##_dtype##_mirror_to_set( \
int unit, bcm_port_t port);
#include <bcm_int/bcm_dlist.h>

/* Dispatch table for this function, which uses the externs above */
#define BCM_DLIST_ENTRY(_dtype)\
bcm_##_dtype##_mirror_to_set, //问1
static int (*_mirror_to_set_dispatch[])(
int unit,
bcm_port_t port) =
{
#include <bcm_int/bcm_dlist.h>
0
};

来自broadcom交换芯片SDK
问1:(从语法角度来说)这里逗号有什么用?可以表示下一行的内容仍属于#define 范围吗?

问2:(从功能上说)赋值0是表示数组为空吗?一般这样左有什么好处?

问3:前后重复#define同一个宏,宏是否会被覆盖?这样重复定义同一个宏有什么好处?

答1:逗号就是逗号,这个就是宏的内容。宏的最后是一个逗号。表示下一行也是的是 \ 号
答2:赋值为0,等于给这个数组里所有的值都赋值为0,不是空。这样做只是对数组内容的一个初始化。
答3:重复定义一个宏,等于宏的重新定义,这之后的宏以新定义的为准。追问

如题,代码里定义的是一个函数类型的指针的数组,那么,把里面所有元素都赋值0,意思是每一个函数指针初值都为0?那就是我说的函数为空了

追答

数组元素是0,元素代表函数指针的话,那就是空。

温馨提示:答案为网友推荐,仅供参考