C Struct语法问题

Ant*_*ton 8 c linux syntax struct kernel

当我最近为我的raid设备开了一个相当老的驱动程序时出现了这个问题.为了能够编译Linux系统的驱动程序,我开始研究我输出的所有错误.我遇到了驱动程序源中使用的这种语法:

struct file_operations t3_fops = {
        owner:                  THIS_MODULE,
        ioctl:                  ft_ioctl,
        fasync:                 ft_fasync,
        open:                   ft_open,
        release:                ft_release
};
Run Code Online (Sandbox Code Playgroud)

那么伙计们,你能帮我理解":"是什么意思吗?这是C语法吗?我知道有一些字段定义,但这看起来与我不同.

小智 6

这是C99 struct初始化语法.owner,ioctl等等,是在结构中的字段的名称,以及THIS_MODULE,ft_ioctl等,都值.除了编译时,这实际上是在执行以下操作:

struct file_operations t3_fops;
t3_fops.owner = THIS_MODULE;
t3_fops.ioctl = ft_ioctl;
...
Run Code Online (Sandbox Code Playgroud)

新语法很好,因为它使初始化工作无论结构字段的顺序如何.

  • 在标准**6.7.8初始化**中,我看不到':'语法,所以我认为它是gcc的扩展.或者我想念它上面的内容?你能否指出标准提到结构初始化语法':'的位置?谢谢! (5认同)

sig*_*ice 6

这种初始化结构成员的语法称为指定的初始化程序.这:是较旧的GCC特定语法.这在GCC手册中有记录.