结构体定义中使用逗号的意义

renguia 2012-07-25 08:07:47
在linux内核头文件中有如下pci_device_id结构体的定义
struct pci_device_id {
__u32 vendor, device; /* Vendor and device ID or PCI_ANY_ID*/
__u32 subvendor, subdevice; /* Subsystem ID's or PCI_ANY_ID */
__u32 class, class_mask; /* (class,subclass,prog-if) triplet */
kernel_ulong_t driver_data; /* Data private to the driver */
};
赋值时有时候是如下按结构体有七个成员赋值:
static struct pci_device_id epic_pci_tbl[] = {
{ 0x10B8, 0x0005, 0x1092, 0x0AB4, 0, 0, SMSC_83C170_0 },
{ 0x10B8, 0x0005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SMSC_83C170 },
{ 0x10B8, 0x0006, PCI_ANY_ID, PCI_ANY_ID,
PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, SMSC_83C175 },
{ 0,}
};
但有时候又按结构体只有四个成员赋值:
static struct pci_device_id gx_chipset_tbl[] __initdata = {
{ PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY,
PCI_ANY_ID, PCI_ANY_ID },
{ PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520,
PCI_ANY_ID, PCI_ANY_ID },
{ PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5510,
PCI_ANY_ID, PCI_ANY_ID },
{ 0, },
};

我的问题是:此结构体到底有几个成员?vendor, device中用逗号分隔,结构体定义中使用逗号的意义是他们各是一个成员吗?为什么上面两种结构体赋值都正确?
...全文
872 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ies_sweet 2012-07-26
  • 打赏
  • 举报
回复
结构体有7个成员

对部分成员赋值,应该是对前面几个成员赋值

语法不错,但是这样用似乎不大符合做项目的规范
proorck6 2012-07-25
  • 打赏
  • 举报
回复
/* Vendor and device ID or PCI_ANY_ID*/
不懂,不过上述注视中的or应该很关键。
沭水河畔 2012-07-25
  • 打赏
  • 举报
回复
结构体有7个成员,理由:
int a, b;等效于int a; int b;

复制,结构体的成员声明之后,它有默认值,如果不赋值,那么便是默认值。
上面的代码中不赋值的原因是:后面三个结构体成员的值要在运行后确定。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧