Я работаю над файлом, который работает на разных процессорах, поэтому заголовочные файлы меняются в зависимости от оборудования.Моя программа должна получить индекс и, если это допустимый индекс для определенного перечисления, использовать его, в противном случае перейти к значению по умолчанию.
Мне нужно проверить, является ли этот индекс допустимым для этого перечисления.ОДНАКО, enum немного отличается от процессора к процессору.У меня есть заголовочный файл для каждого чипа, поэтому я не знаю, сколько индексов определено.Вот как это выглядит примерно так:
typedef enum
{
POWER_LEVEL_0
POWER_LEVEL_1,
POWER_LEVEL_2,
POWER_LEVEL_3,
POWER_LEVEL_4
} power_type;
и мне нужно иметь возможность проверить, определен ли полученный индекс, например:
int input;
...
if( exists_in_power_type(input) )
//accept the value
else
//use default value
Я знаю количество индексовбудет в диапазоне от 4 до 7, и это может возрасти, если я запусту этот проект на новом процессоре, который может иметь 8 или более опций питания.В этом случае я хочу, чтобы моя программа была переносимой, и ей нужно только определить перечисление с тем же именем в новом заголовке для этого процессора.
Эта проблема может быть немного проще, поскольку значения перечисления начинаются с 0и увеличение на 1. Есть ли способ получить значение enum длины / максимума, не зная его определения?Есть ли подобная работа, которую я мог бы использовать здесь?