我想要的代码看起来像这样......
static linked_list* globalListHoldingAllSortsOfGoodies = initialize_linked_list();
/* [In a different file...] */
static int placeholder = add_to_global_list(goodies);
但是非常量初始化在 C 中是不可能的。
有没有什么方法可以在不破坏 C89 的情况下获得同样的效果?
重点是通过使用也使用占位符的宏声明好东西,让不同的东西“自动注册”到全局列表中。
最佳答案
您可以从静态数据构建链表。在 ANSI C89(又名 ISO C90)中,它可能看起来像这样:
struct node
{
int data;
struct node *next;
};
struct node nodes[] = { { 42, &nodes[1] }, { 137, 0 } };
struct node *list = nodes;
在 ISO C99(2000 年由 ANSI 采用)中,您还可以使用复合文字,例如
struct node *list = &(struct node){ 42, &(struct node){ 137, 0 } };
混合静态分配的节点和动态分配的节点是有问题的,因为释放前者会导致未定义的行为,因此有必要跟踪哪些节点属于哪个组。
关于c - C 中的静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240928/