В C дополнительная инициализирующая запятая была разрешена в инициализаторах, заключенных в скобки, с начала времен. Именно там вы можете использовать одинаковое расположение запятых в инициализаторах, таких как
struct SomeStructType s = {
value1,
value2,
value3,
};
Это облегчает, например, перестановку инициализаторов в списке, если такая необходимость возникнет. Хотите ли вы использовать его или нет, это вопрос личных предпочтений.
Что касается синтаксиса :
, это расширение, специфичное для GCC, как уже объяснил @geekosaur. Соответствующая функциональность была стандартизирована в C99 с другим синтаксисом.