¿Hay alguna forma de asignar valores a enumeraciones durante el tiempo de ejecución en el objetivo c? Tengo varias enumeraciones y quiero que cada enum tenga cierto valor. Los valores se pueden leer desde un archivo xml. ¿Hay alguna forma de hacer esto?¿Cambia los valores enum en el tiempo de ejecución?
6
A
Respuesta
16
Desafortunadamente, @Binyamin es correcta, no se puede hacer esto con una enumeración. Por esta razón, por lo general lo siguiente en mis proyectos:
// 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;
}
Esto también tiene la ventaja de ser capaz de recorrer los valores, lo cual no es posible con una enumeración normales:
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]);
}
Con todo, esta es mi forma preferida de hacer enumeraciones en C.
5
No, la información de enumeraciones se borra en el momento de la compilación.
+4
Lamentablemente este es el caso. Sin embargo, puede usar una estructura en lugar de una enumeración si desea mantener la información. –
Cuestiones relacionadas
- 1. Obtenga los valores enum de web.config en tiempo de ejecución
- 2. ¿Cómo se agrupan los valores de Enum?
- 3. Controlando la visibilidad de los valores enum
- 4. ¿Cambiar los valores en Flags Enum?
- 5. bucle a través de los valores enum
- 6. ¿Cómo probar los valores enum en la prueba JSTL EL?
- 7. cómo asignar valores de la matriz en tiempo de ejecución
- 8. Cómo usar los valores enum en f: selectItem (s)
- 9. Pasa por los valores Enum "seleccionados"?
- 10. ¿Poner los valores ENUM a android spinner?
- 11. operaciones aritméticas en valores enum
- 12. ios cambia el controlador de vista predeterminada del guión gráfico en tiempo de ejecución
- 13. Valores enum no únicos
- 14. Reclamo en tiempo de compilación cuando no todos los valores enum se manejan en una sentencia switch en C++
- 15. C# Obtener Enum valores
- 16. SLF4J - Logback: ¿cómo configurar los registradores en tiempo de ejecución?
- 17. desactivar el tiempo de ejecución datagridviewcombobox
- 18. ¿Cómo obtener todos los valores enum en Java?
- 19. EnumMap vs Enum valores
- 20. WPF Imagen que cambia dinámicamente Origen de la imagen durante el tiempo de ejecución
- 21. Iterar los valores de enum usando genéricos de Java
- 22. Valores de enum de acceso en Rust
- 23. Verificar valores de enum válidos antes de usar enum
- 24. Cargando jar en el tiempo de ejecución
- 25. El tiempo máximo de ejecución en phpMyadmin
- 26. Mida el tiempo de ejecución en C#
- 27. Delphi 7 - ¿Por qué Windows 7 cambia la codificación de caracteres en tiempo de ejecución?
- 28. LINQ ejecución diferida con los valores locales
- 29. ¿Por qué no podemos acceder a los valores enum desde una instancia enum en C#?
- 30. Eliminando los valores enum de la columna mysql
@ Richard ... podría explicar qué es el __tribuidor __ ((constructor)) .. gracias por la respuesta –
@learningDroid es una La extensión GCC, que le permite crear una función que se llama justo antes de que se cargue el objetivo (en un dylib, sería antes de que se ejecute la primera función desde el dylib, en una aplicación, justo antes de 'main()') . Una construcción muy útil, y mientras no hagas ningún trabajo pesado en ella, estarás bien. –
Estoy planeando leer un archivo xml y asignar valores a las enumeraciones en una estructura. ¿Cree que esto será demasiado pesado en el método de atributo __ –