plain C tiene una función agradable - punteros de tipo void, que se pueden utilizar como puntero a cualquier tipo de datos.
Pero, supongamos que he siguiente estructura:matriz de tipo void
struct token {
int type;
void *value;
};
donde el campo valor puede apuntar a char matriz o a int, o alguna otra cosa.
Así que cuando se asigna una nueva instancia de esta estructura, necesito:
1) asignar memoria para esta estructura;
2) asignar memoria para el valor y asignarla al campo de valor.
Mi pregunta es - ¿hay formas de declarar "gama de tipo void", que se puede lanzar a cualquier otro tipo como puntero vacío?
Todo lo que quiero es usar "arreglo de miembro flexible" (descrito en 6.7.2.1 del estándar C99) con capacidad para transmitir a cualquier tipo.
Algo como esto:
struct token {
int type;
void value[];
};
struct token *p = malloc(sizeof(struct token) + value_size);
memcpy(p->value, val, value_size);
...
char *ptr = token->value;
supongo que declara tokens> valor como char o int matriz y echando a tipo necesario más adelante va a hacer este trabajo, pero puede ser muy confuso para alguien que va a leer esto código más tarde.
¿Doble punteros? –
usando 'char []' está bien imho, ya que 'sizeof (char) == 1' y nunca te sorprenderá. Es posible que desee considerar las macros para acceder a 'p-> value' con el tipo correcto. –