请教一个struct 的问题(奇怪)

发布于 2022-09-21 01:09:31 字数 534 浏览 8 评论 0

我在看一个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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

青芜 2022-09-28 01:09:31

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

随心而道 2022-09-28 01:09:31

我也有个类似的问题
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个间又是什么关系呢

各空 2022-09-28 01:09:31

觉得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 编辑 ]

潦草背影 2022-09-28 01:09:31

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建立连接

国产ˉ祖宗 2022-09-28 01:09:31

藍豆兄看得確實仔細

莳間冲淡了誓言ζ 2022-09-28 01:09:31

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

意中人 2022-09-28 01:09:31

我也凑热闹 哈哈

隔纱相望 2022-09-28 01:09:31

确切的说,是GCC给linux加上的这种功能,正因为如此,linux对GCC依赖性很强哦~~
就是这个样~~~

寂寞陪衬 2022-09-28 01:09:31

这个是最新的C99中的语法,GCC的是没有前面的“.”。这种语法在GCC下只能用于C语言,C++文件中会编译失败;GCC自己的语法两种语言都可以使用。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文