C - 结构数组初始化中空终止符的含义

标签 c linux-device-driver device-tree

在通过 PCIe 驱动程序时,我看到了这种类型的结构数组初始化

static struct pci_device_id DWC_ETH_QOS_id[] = {
    { PCI_DEVICE(VENDOR_ID, DEVICE_ID), },
    { },
}

我在设备树 of_device_id 初始化器中也发现了类似的代码:

static const struct of_device_id rh850_match_table[] = {
    { .compatible = "renesas,rh850" },
    { }
};

为什么末尾有一个空的{}?

感谢您的帮助!

最佳答案

正如@underscore_d 所指出的,{} 被添加为标记元素,以便循环遍历这些数组的代码知道何时停止。它依赖于最后一个“空”哨兵元素作为终止条件。

依赖哨兵元素的代码:

结构 of_device_id 表: https://elixir.bootlin.com/linux/v4.14.76/source/drivers/of/base.c#L997

结构 pci_device_id: https://elixir.bootlin.com/linux/v2.6.35/source/drivers/pci/pci-driver.c#L246

关于C - 结构数组初始化中空终止符的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52796221/

相关文章:

linux - 哪个版本的linux内核开始支持sd/sdio version 3.00?

python - 使用 pyparsing 将 devicetree 解析为结构化字典

linux-kernel - 设备树不匹配 : . 从未调用过探测器

beagleboneblack - 如何使用设备树覆盖在Beaglebone Black上添加i2c设备?

C 语言 - 无法将 SIGINT 重置为默认值

c - C 代码错误。会出现 "No file"

c - 多线程使用ncurses时,终端乱码

linux-device-driver - 内核空间动态分配

c - 如何在 Visual Studio 2017 项目中使用 modbus 库?

linux - 解密设备树