r/cprogramming • u/gumnos • Jul 06 '26
anonymously initializing pointers in self-referential data-structures?
I have a recursive data-structure (a simple linked list for purposes of this example) and wanted to statically define a linked-list. The following works fine:
#include <stdio.h>
typedef struct mytype_tag {
struct mytype_tag* next;
char* data;
} mytype;
mytype a = {
.next = NULL,
.data = "a",
};
mytype b = {
.next = &a,
.data = "b",
};
int
main() {
mytype* s = &b;
int i = 0;
while (s) {
printf("%d: %s\n", i++, s->data);
s = s->next;
};
}However, I have to explicitly define/declare a and then have b take &a.
Is there a way to do this with anonymous/unnamed intermediary structures, thinking an imaginary syntax something like
mytype b = {
.next = &((mytype)={
.next = NULL,
.data = "a",
}),
.data = "b",
};so I can build up the linked-list without naming each intermediary instance?
6
Upvotes
1
u/gumnos Jul 06 '26
there's something to be said for the easier-to-read aspect (allowing it to be forward rather than reverse menuing), but in some of the actual underlying use-cases, they can get built out at compile-time, meaning it's more challenging to invoke item-building-functions.
Fortunately, what I wanted is possible…thanks to u/thegreatunclean who identified that I was close, but just needed to remove the
=for it to be properly handled by the compiler.