Ну, единственный способ, который я вижу, неприятен:
#define LISTA_INIT_EMPTY { .next = (&my_list), .prev = (&my_list) }
Совсем не приятно, так как работает, только если ваша переменная называется my_list
.И нет хорошего способа, поскольку this
не существует в C.
Почему бы не использовать NULL
вместо указания на "this"?Если это неудовлетворительно, лучше всего сохранить параметризованный макрос.
РЕДАКТИРОВАТЬ: (благодаря комментарию R ниже, я наконец понял необходимость):
Какздесь нет «this», и чтобы ввести имя переменной только один раз, я предлагаю использовать такой макрос:
#define CREATE_EMPTY_LISTA(name) struct lista name = { .next=&name, .prev=&name }
А позже в коде:
CREATE_EMPTY_LISTA(my_list); // creates and initializez my_list at the same time