Пожалуйста, объясните использование ':' и завершающего ',' в этом коде инициализации структуры 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 с другим синтаксисом.