Это не обязательно. В разделе 6.7.2.2
из C99 синтаксис представлен следующим образом:
enum-specifier:
enum identifieropt { enumerator-list }
enum identifieropt { enumerator-list , }
enum identifier
enumerator-list:
enumerator
enumerator-list , enumerator
enumerator:
enumeration-constant
enumeration-constant = constant-expression
Обратите внимание на первые две формы enum-specifier
, одну с запятой и одну без.
Одно из преимуществ, которое я видел в его использовании, заключается в таких вещах, как:
enum {
Val1,
Val2,
Val3,
} someEnum;
где, если вы хотите добавить (например) Val4
и Val5
, просто скопируйте и вставьте строку Val3
, не беспокоясь о настройке запятых.
И, как указано в комментарии, также может быть упрощено создание автоматических генераторов кода, чтобы им не требовалась специальная обработка окончательного значения. Они могут просто выводить каждое значение, за которым следует запятая.
Это можно сравнить с часто встречающимся SQL:
select fld1, fld2 from tbl where 1=1 and fld1 > 8
В этом случае where 1=1
существует только для того, чтобы вам не приходилось ставить where
перед вашим первым предложением и and
перед каждым последующим. Вы можете просто положиться на тот факт, что where
уже есть и просто использовать and
для всех добавленных вами.
Некоторые люди могут думать, что это пахнет ленью, и они правы, но это не обязательно плохо: -)
Любой приличный оптимизатор запросов к СУБД должен иметь возможность вырезать такое постоянное предложение перед тем, как перейти к таблицам базы данных.