请教一个struct 的问题(奇怪)
我在看一个USB文档的时候,看到struct这个用法:
struct bus_tye usb bus_type=
{
.name="usb",
.match=usb_device_match,
.uevent=usb_uevent,
.suspend=usb_suspend,
.resume=usb_resume,
} ;
我有几个疑问:
1:结构体成员不是用“;”隔开的吗?而这里用了“,”,为什么?
2:.name等前面用“.”,应该跟结构体变量的赋值 bus_type usb bus_type.name="usb";应该是一样的吧。
谢谢各位,帮我解答一下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
这是linux结构体赋值的一种特别方式。
1:结构体成员定义是用分号隔开的,但这里是对结构题赋值,个人认为{……}是一个整体,说一里面的成员赋值都用‘,’隔开。
2:是一樣的。但这种赋值方式非常灵活简单。如果都按bus_type usb bus_type.name="usb";来写,那明显书写语句多不说,而且看起来没有那么直观。
我也有个类似的问题
2.4版本里用file_operations建议与设备节点的连接,比如说struct file_operations test_fops
但到2.6版本后在定义这个问题上变成了static struct test_ops davinci_test_ops,test_ops与davinci_test_ops是什么关系呢?
LZ所说的struct bus_tye usb bus_type,bus_tye,usb和bus_type这里为什么是3个,这3个间又是什么关系呢
觉得lz的帖子中编辑时好像少了一个"t"和下划线“_"
struct bus_tye usb bus_type=
{
.name="usb",
.match=usb_device_match,
.uevent=usb_uevent,
.suspend=usb_suspend,
.resume=usb_resume,
} ;
应为:
struct bus_type usb_bus_type=
{
.name="usb",
.match=usb_device_match,
.uevent=usb_uevent,
.suspend=usb_suspend,
.resume=usb_resume,
} ;
bus_type是描述总线的结构体,include/linux/device.h,这样应该就好了
49 struct bus_type {
50 const char * name;
51
52 struct subsystem subsys;
53 struct kset drivers;
54 struct kset devices;
55 struct klist klist_devices;
56 struct klist klist_drivers;
57
58 struct bus_attribute * bus_attrs;
59 struct device_attribute * dev_attrs;
60 struct driver_attribute * drv_attrs;
61
62 int (*match)(struct device * dev, struct device_driver * drv);
63 int (*hotplug) (struct device *dev, char **envp,
64 int num_envp, char *buffer, int buffer_size);
65 int (*suspend)(struct device * dev, pm_message_t state);
66 int (*resume)(struct device * dev);
67 };
[ 本帖最后由 蓝豆 于 2008-8-25 10:40 编辑 ]
struct test_ops davinci_test_ops
test_ops这个里面的bus应该是与/dev/test
davinci_test_ops这个应该是static int __init davinci_rtc_init(void)里的davinci_rtc_init相关.然后在register里用&davinci_test_ops建立连接
藍豆兄看得確實仔細
EN,谢谢各位!!!现在才发觉这个论坛的人气真旺!真的很感动,简直感动中国的老百姓。
我也凑热闹 哈哈
确切的说,是GCC给linux加上的这种功能,正因为如此,linux对GCC依赖性很强哦~~
就是这个样~~~
这个是最新的C99中的语法,GCC的是没有前面的“.”。这种语法在GCC下只能用于C语言,C++文件中会编译失败;GCC自己的语法两种语言都可以使用。