Пожалуйста, объясните использование ':' и завершающего ',' в этом коде инициализации структуры C

static struct file_operations memory_fops = {
    open:       memory_open,    /* just a selector for the real open */
};

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

2 ответа

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

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

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

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

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

Другие вопросы по тегам