免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3677 | 回复: 10
打印 上一主题 下一主题

请教一个struct 的问题(奇怪) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-25 09:55 |只看该作者 |倒序浏览
我在看一个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";应该是一样的吧。



谢谢各位,帮我解答一下。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2008-08-25 10:07 |只看该作者

回复 #1 锋一样的男人 的帖子

这是linux结构体赋值的一种特别方式。
1:结构体成员定义是用分号隔开的,但这里是对结构题赋值,个人认为{……}是一个整体,说一里面的成员赋值都用‘,’隔开。
2:是一樣的。但这种赋值方式非常灵活简单。如果都按bus_type usb bus_type.name="usb";来写,那明显书写语句多不说,而且看起来没有那么直观。

论坛徽章:
0
3 [报告]
发表于 2008-08-25 10:18 |只看该作者
我也有个类似的问题
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个间又是什么关系呢

论坛徽章:
0
4 [报告]
发表于 2008-08-25 10:28 |只看该作者
觉得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 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-08-25 10:51 |只看该作者
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建立连接

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
6 [报告]
发表于 2008-08-25 11:04 |只看该作者

回复 #4 蓝豆 的帖子

藍豆兄看得確實仔細

论坛徽章:
0
7 [报告]
发表于 2008-08-25 11:55 |只看该作者

谢谢,各位

EN,谢谢各位!!!现在才发觉这个论坛的人气真旺!真的很感动,简直感动中国的老百姓。

论坛徽章:
0
8 [报告]
发表于 2008-08-25 19:51 |只看该作者
我也凑热闹 哈哈

论坛徽章:
0
9 [报告]
发表于 2008-08-26 17:51 |只看该作者
确切的说,是GCC给linux加上的这种功能,正因为如此,linux对GCC依赖性很强哦~~
就是这个样~~~

论坛徽章:
0
10 [报告]
发表于 2008-08-29 08:59 |只看该作者

回复 #9 小瓶盖儿 的帖子

这个是最新的C99中的语法,GCC的是没有前面的“.”。这种语法在GCC下只能用于C语言,C++文件中会编译失败;GCC自己的语法两种语言都可以使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP