读书人

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

发布时间: 2012-08-11 20:50:31 作者: rapoo

结构体定义中使用逗号的意义
在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中用逗号分隔,结构体定义中使用逗号的意义是他们各是一个成员吗?为什么上面两种结构体赋值都正确?

[解决办法]
结构体有7个成员,理由:
int a, b;等效于int a; int b;

复制,结构体的成员声明之后,它有默认值,如果不赋值,那么便是默认值。
上面的代码中不赋值的原因是:后面三个结构体成员的值要在运行后确定。
[解决办法]
/* Vendor and device ID or PCI_ANY_ID*/
不懂,不过上述注视中的or应该很关键。
[解决办法]
结构体有7个成员

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

语法不错,但是这样用似乎不大符合做项目的规范

读书人网 >C语言

热点推荐