c - C 中的静态初始化

标签 c static c89

我想要的代码看起来像这样......

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/

相关文章:

c - 检查数字的数字子序列的 C 程序

c - Lua C API : Stack empty after pcall error

c - 如何替换此 GOTO 语句使其清晰

java - 面向对象设计和在抽象父类(super class)中初始化静态成员

Android:声明静态位图?是还是不是?

C比较两个大于如果一个为空的指针

c - 在 C 中实现 FIFO 队列

c++ - 标题排除?

Java - 同步方法/ block

C 编程 字符串打印