Перечисления просто предоставляют тип с ключевыми словами, которые переводятся в числа во время компиляции. Итерировать по ним невозможно, так как C не имеет особой интроспективной возможности, и они просто являются заполнителями для числовых значений (по умолчанию, начиная с 0). Пример:
enum test {
FIRST,
SECOND,
THIRD
};
Вы также можете вручную указать числа, на которые они переводят:
enum test {
FIRST=1,
SECOND=2,
THIRD=3
};
Это особенно полезно, когда вы хотите, чтобы тип данных имел разные состояния или свойства, но использование простого числового значения было бы неясно. Это означает, что вместо того, чтобы делать что-то вроде:
if (status == 2)
, что означает, что программист должен выяснить, что 2
означает, что вы можете сделать:
if (status == READ)
Что гораздо понятнее.