yapı Bu tür bağlantılı liste başı olarak kullanılır:Belirlenen başlatıcıyı kullanırken 'bu' yapıya işaretçi almak mümkün mü?
struct lista
{
struct lista* next;
struct lista* prev;
};
aşağıdaki kendini yapısına bir, her iki puan önceki, bu liste boştur. Makro parametre olmadan, şu arada aynı şeyi yapmak için herhangi bir yol yoktur,
struct lista my_list = LISTA_INIT_EMPTY(&my_list);
Ama ?:
:#define LISTA_INIT_EMPTY(list) { .next = (list), .prev = (list) }
bu şekilde: aşağıdaki makro yapıyı başlatılırken için de kullanılabilir
struct lista my_list = LISTA_INIT_EMPTY;
aşağıdaki çalıştı, ama bir derleme hatası neden oldu:
#define LISTA_INIT_EMPTY { .next = &.next, .prev = &.next }
Ben OP tüm listeler istiyor, İlk boş olanı içeren, dairesel olmak için. Bu tamamen mantıksız değil; Genellikle liste işleme işlevlerinizdeki tüm çirkin köşe durumlarını ortadan kaldırır. –
'CREATE_EMPTY_LISTA' temel olarak OP tarafından belirtilen 'LISTA_INIT_EMPTY' ile aynıdır. –
Evet, ama önemli bir farkla: 'struct lista my_list = LISTA_INIT_EMPTY (& my_list);' sizi değişkenin ismini tekrarlamaya zorlar, ki bu hoş ve oldukça hataya yatkın değildir. CREATE_EMPTY_LISTA (my_list); 'tekrar etmemenizi sağlar. – Shlublu