Jinak seznamy se často řeší pomocí maker. Nadefinuješ si třeba takovou strukturu:
struct my_struct
{
struct my_struct *foo_prev;
struct my_struct *foo_next;
int data;
}
Makru pro práci se seznamem pak předáváš typ položek (struct my_struct *) a prefix ukazatelů prev a next (foo). Takový přístup má pak tu výhodu, že můžeš strkat jednu instanci do více seznamů, pokud si na to definuješ více pointerů:
struct my_struct2
{
struct my_struct2 *foo_prev;
struct my_struct2 *foo_next;
struct my_struct2 *bar_prev;
struct my_struct2 *bar_next;
int data;
}
Pro práci s prvním seznamem předáš makru parametr foo, pro práci s druhým pak bar.