请在此结构初始化C代码中解释':'和尾随','的使用

mik*_*ike 3 c linux uclinux

static struct file_operations memory_fops = {
    open:       memory_open,    /* just a selector for the real open */
};
Run Code Online (Sandbox Code Playgroud)

这是来自uclinux中的mem.c文件

gee*_*aur 6

这是GNU风格的初始化语法; 该open成员初始化为memory_open,其余部分未初始化.C99使用不同的语法(.open = memory_open).

  • 你确定"未初始化"部分吗?通常在C中它是全有或全无,即如果至少*某些*被初始化,那么其他一切都是*零初始化*.这就是它在C99中使用新语法的方式.当然,GCC特定的扩展可以表现不同. (2认同)

AnT*_*AnT 5

在 C 中,从一开始就允许在大括号内的初始值设定项中使用可选的尾随逗号。它在那里,以便您可以在初始化程序中使用统一的逗号放置,例如

struct SomeStructType s = {
  value1,
  value2,
  value3,
};
Run Code Online (Sandbox Code Playgroud)

例如,如果需要,可以更轻松地重新排列列表中的初始值设定项。是否要使用它是个人喜好的问题。

至于:语法,正如@geekosaur 已经解释的那样,它是 GCC 特定的扩展。相应的功能在 C99 中使用不同的语法进行了标准化。