перечисление связанных значений в с - PullRequest
1 голос
/ 25 марта 2010

У меня есть объявление enum как:

enum qty { cars = 10, bikes = 9, horses = 9 ... } // total 28

Как мне сложить все связанные значения enumerator-list?

Ответы [ 5 ]

5 голосов
/ 25 марта 2010

Вы не можете знать во время выполнения содержимое enum в C.

Кроме того, это звучит как злоупотребление перечислениями. Вы должны использовать их для определения констант , которые вы будете использовать внутри своего кода, а не для хранения количеств или тому подобного, что в противном случае должно быть переменная : значения перечисления являются неизменными. Используйте целочисленные массивы для этой цели; Вы можете пройти через это.

3 голосов
/ 25 марта 2010

Нет способа выразить "для всех перечислений в qty" в C.

1 голос
/ 25 марта 2010

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

1 голос
/ 25 марта 2010

Невозможно пройти через них в C (это можно сделать в Ada ;-), так что это все, что вы можете сделать:

int sum = cars + bikes + horses + ...;

но, как сказал Знеак и Тайлер, вы, вероятно, не используете правильную конструкцию.

0 голосов
/ 27 марта 2010

Если вам нужно синхронизировать их очень много, то может пригодиться злоупотребление препроцессором:

#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)
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...