У меня есть объявление enum как:
enum qty { cars = 10, bikes = 9, horses = 9 ... } // total 28
Как мне сложить все связанные значения enumerator-list?
Вы не можете знать во время выполнения содержимое enum в C.
enum
Кроме того, это звучит как злоупотребление перечислениями. Вы должны использовать их для определения констант , которые вы будете использовать внутри своего кода, а не для хранения количеств или тому подобного, что в противном случае должно быть переменная : значения перечисления являются неизменными. Используйте целочисленные массивы для этой цели; Вы можете пройти через это.
Нет способа выразить "для всех перечислений в qty" в C.
В C перечисления просто отображаются в целые числа. Они даже не безопасны, поскольку вы можете свободно заменять членов одного перечисления в местах, предназначенных для других перечислений.
Невозможно пройти через них в C (это можно сделать в Ada ;-), так что это все, что вы можете сделать:
int sum = cars + bikes + horses + ...;
но, как сказал Знеак и Тайлер, вы, вероятно, не используете правильную конструкцию.
Если вам нужно синхронизировать их очень много, то может пригодиться злоупотребление препроцессором:
#define SUM(name, count) + (count) #define DEF(name, count) name = (count), enum qty { # define QTY(f) \ f(cars, 10) \ f(bikes, 9) \ f(horses, 9) QTY(DEF) total = 0 + QTY(SUM) };