Я пытаюсь написать файл заголовка, содержащий макросы для двусвязного списка типа c.
Узлы определены следующим образом:
#define node(T) \
struct node_##T \
{ \
T val; \
struct node_##T *next; \
struct node_##T *prev; \
}
Затем я использую node(T)
для создания linkedlist(T)
struct:
#define linkedlist(T) \
struct linkedlist_##T \
{ \
unsigned int count; \
node(T) *head; \
node(T) *end; \
}
Наконец, объявляется linkedlist(Student) ll;
, который вызывает node(Student)
и выдает эту ошибку при компиляции:
error: redefinition of ‘struct node_Student’
Ошибка возникает в строке, в которой впервые объявлено struct node_##T
.
Интересно, что ошибка исчезает, когда я вставляю точку с запятой в конце определения структуры, например:
. . . .
struct node_##T *prev; \
};
Однако это невозможно сделать, так как тогда объявление node(T) N;
будет невозможно.
Что может быть возможным исправлением?