Есть ли способ присвоить значения для перечислений во время выполнения в объекте c? У меня есть несколько перечислений и хочу, чтобы каждый из перечислений имел определенное значение. Значения могут быть прочитаны из XML-файла. Есть ли способ сделать это?Изменить значения переполнения во время выполнения?
6
A
ответ
16
Unfortunatley, @Binyamin правильно, вы не можете сделать это с помощью перечисления. По этой причине, я обычно делаю следующее в моих проектах:
// in .h
typedef int MyEnum;
struct {
MyEnum value1;
MyEnum value2;
MyEnum value3;
} MyEnumValues;
// in .m
__attribute__((constructor))
static void initMyEnum()
{
MyEnumValues.value1 = 10;
MyEnumValues.value2 = 75;
MyEnumValues.value3 = 46;
}
Это также имеет преимущество возможности перебирать значения, которые не возможно с нормальным перечислимого:
int count = sizeof(MyEnumValues)/sizeof(MyEnum);
MyEnum *values = (MyEnum *) &MyEnumValues;
for (int i = 0; i < count; i++)
{
printf("Value %i is: %i\n", i, values[i]);
}
В общем, это мой предпочтительный способ сделать перечисления в C.
5
Нет, информация перечислений удаляется во время компиляции.
+4
К сожалению, это так. Однако вы можете использовать struct вместо enum, если вы хотите сохранить информацию. –
Смежные вопросы
- 1. обнаруживает ошибку переполнения/переполнения во время выполнения?
- 2. Обнаружение переполнения стека во время выполнения
- 3. Изменить вид во время выполнения
- 4. Почему стекирование переполнения/переполнения не запускается во время выполнения?
- 5. Изменить язык во время выполнения
- 6. Изменить web.config во время выполнения
- 7. Изменить string.xml во время выполнения
- 8. Изменить SelectedValuePath во время выполнения
- 9. изменить сборку во время выполнения?
- 10. Как изменить параметры init во время выполнения?
- 11. изменить значение глобальной переменной во время выполнения
- 12. Как изменить планировщик времени во время выполнения
- 13. изменить метод/функцию во время выполнения
- 14. Как изменить перечисление во время выполнения (Java)
- 15. Изменение значения set CABasicAnimation во время выполнения?
- 16. Изменить переводы Datepicker во время выполнения
- 17. Изменить цвет заголовка во время выполнения
- 18. Изменить структуру тега (XML) во время выполнения
- 19. Изменение значения макроса во время выполнения
- 20. Изменить ширину kendo numerictextbox во время выполнения
- 21. ASP.NET изменить значения ресурсов из .resx-файлов во время выполнения
- 22. C#: изменить web.config во время выполнения
- 23. Переопределение постоянного значения во время выполнения
- 24. Значения изменения Selenium ide во время выполнения
- 25. Как изменить условие «Сумма» во время выполнения?
- 26. Чтение значения ширины во время выполнения
- 27. Как изменить имя таблицы во время выполнения
- 28. изменить базу данных во время выполнения codeigniter
- 29. как изменить persistence.xml во время выполнения
- 30. Изменить переменную на литерал во время выполнения?
@ Richard .. Не могли бы вы объяснить, что такое __ атрибут __ ((конструктор)) .. спасибо за ответ, хотя –
@learningDroid это Расширение GCC, которое позволяет вам создать функцию, которая вызывается непосредственно перед загрузкой цели (в dylib она должна быть до запуска первой функции из dylib в приложении, она находится непосредственно перед 'main()') , Очень полезная конструкция, и пока вы не делаете тяжелой работы, вы должны быть в порядке. –
Я планирую прочитать xml-файл и присвоить значения перечислениям в структуре. Считаете ли вы, что это слишком тяжело в методе __attribute –