Este tipo de estructura se utiliza como cabeza de lista enlazada:¿Es posible obtener un puntero a la estructura 'this' cuando se utiliza el inicializador designado?
struct lista
{
struct lista* next;
struct lista* prev;
};
Cuando next y prev ambos puntos a struct sí, entonces la lista está vacía. La siguiente macro se puede utilizar para inicializar la estructura:
#define LISTA_INIT_EMPTY(list) { .next = (list), .prev = (list) }
esta manera:
struct lista my_list = LISTA_INIT_EMPTY(&my_list);
Pero, ¿hay alguna manera de hacer lo mismo mediante la siguiente manera, sin parámetro de macro ?:
struct lista my_list = LISTA_INIT_EMPTY;
he intentado lo siguiente, pero causó un error de compilación:
#define LISTA_INIT_EMPTY { .next = &.next, .prev = &.next }
Creo PO quiere todas las listas, incluyendo el vacío inicial, para ser circular. Esto no es completamente irrazonable; a menudo elimina todos los casos de esquinas feas en las funciones de manejo de listas. –
'CREATE_EMPTY_LISTA' es básicamente lo mismo que' LISTA_INIT_EMPTY' mencionado por el OP. –
Sí, pero con una diferencia importante: 'struct lista my_list = LISTA_INIT_EMPTY (& my_list);' te obliga a repetir el nombre de la variable, lo que no es agradable y es bastante propenso a errores. 'CREATE_EMPTY_LISTA (my_list);' le permite no repetirlo. – Shlublu