Пожалуйста, объясните использование ':' и завершающего ',' в этом коде инициализации структуры C - PullRequest
3 голосов
/ 17 марта 2011
static struct file_operations memory_fops = {
    open:       memory_open,    /* just a selector for the real open */
};

это из файла mem.c в uclinux

Ответы [ 2 ]

6 голосов
/ 17 марта 2011

Это синтаксис инициализации в стиле GNU; open элемент инициализируется как memory_open, остальное остается неинициализированным. C99 использует другой синтаксис (.open = memory_open).

3 голосов
/ 17 марта 2011

В C дополнительная инициализирующая запятая была разрешена в инициализаторах, заключенных в скобки, с начала времен. Именно там вы можете использовать одинаковое расположение запятых в инициализаторах, таких как

struct SomeStructType s = {
  value1,
  value2,
  value3,
};

Это облегчает, например, перестановку инициализаторов в списке, если такая необходимость возникнет. Хотите ли вы использовать его или нет, это вопрос личных предпочтений.

Что касается синтаксиса :, это расширение, специфичное для GCC, как уже объяснил @geekosaur. Соответствующая функциональность была стандартизирована в C99 с другим синтаксисом.

...