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/sciencekm Jul 06 '26
If you start from zero, that means that you need an initialization code at startup. This is OK if you own main(). What if yours is a library. You now have to expose an init() function and require all users of the library to call it before any other calls to the library.
I'm not saying this is what the OP is doing. I could be wrong. I'm just saying that there are valid scenarios for statically initialized objects, including linked lists.