'。'的含义是什么?在结构中

时间:2012-10-24 15:03:50

标签: c pointers

  

可能重复:
  What means the dot before variable name in struct?

const struct file_operations generic_ro_fops = {
    .llseek     = generic_file_llseek,
    .read       = do_sync_read,
    // ....other stuffs
};

我的问题是:

1).llseek的含义是什么以及如何使用. ... file_operations结构定义如下:

2)我可以在上面的结构中说:llseek = generic_file_llseek ;,让指针llseek指向generic_file_llseek而不将.放在llseek之前? //对不起我的英语很差

struct file_operations {
    loff_t (*llseek) (struct file *, loff_t, int);
    ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
    //....other stuffs
}

4 个答案:

答案 0 :(得分:2)

这是c99中引入的特殊结构初始化语法。

如果在结构初始值设定项中有.llseek = generic_file_llseek, ,则表示您正在初始化此特定成员,而不管其相对于结构开始的偏移量。

或者你可以使用没有指示符的初始化,但是当声明结构中的相应字段时,你必须按照确切的顺序放置初始化器。

const struct file_operations generic_ro_fops = {
    generic_file_llseek, // this initializes llseek member
    do_sync_read, // this initializes read member
    // ....other stuffs
};

答案 1 :(得分:1)

这称为指定初始值设定项。您正在初始化结构的确切成员/字段。

  

2.我只想说:“llseek = generic_file_llseek;”在上面的结构中让指针llseek指向generic_file_llseek而不是   点'''。在llseek之前?

没有

您可以执行以下操作来初始化成员:

const struct file_operations generic_ro_fops = {
    generic_file_llseek,
    do_sync_read,
    // ....other stuffs
};

但在这种情况下,您必须按顺序初始化所有内容,就像将成员放在结构中一样。当您只想初始化一些结构字段时,指定的初始值设定项非常有用。

你可以在外部结构中使用这样的东西:

generic_ro_fops.llseek = generic_file_llseek;

答案 2 :(得分:0)

含义

  

1).llseek的含义是什么以及如何使用.... file_operations结构定义如下:

这是C99功能:指定的初始值设定项。使用.,您可以初始化结构的给定字段。在这里,有必要初始化const限定符的结构原因。

如果lseekread在结构定义中按此顺序排列,则可以省略此指示符。

const struct file_operations generic_ro_fops = { 
    generic_file_llseek, 
    do_sync_read 
};

这最后一个方法不是很可维护(如果你改变结构字段的顺序,你必须改变所有的初始化代码),因此这里使用指定的iniitializers的方法更好。

其他方式

  

2)我可以这样说:llseek = generic_file_llseek;在上面的结构中,让指针llseek指向generic_file_llseek而不放置点。在llseek之前? //对不起我的英语很差

不,你不能,因为它不是正确的语法。

参考

  

C11(n1570),§6.7.9初始化

     

如果指定人员的表格为

. identifier
     

然后当前对象(下面定义)应具有结构或联合   type和标识符应该是该类型成员的名称。

答案 3 :(得分:0)

'。'的含义在该结构中称为designated initializer。在结构中,每个'。'表示需要初始化的结构的成员,因此被称为指示符。