0
全球链接变量我想在C程序中有些插件系统的实现。插件将被编译为共享库并在编译期间链接。使用一个名称
比方说,我有一个单向链表结构定义:
struct plugin_iface
{
int data,
struct plugin_iface* next
};
每个插件创建这个结构的全局实例,所有这些实例都具有相同的名字:
struct plugin_iface IfaceList =
{
.data = 42,
.next = &IfaceList
} // Defined in the global scope in each plugin
如我所预计,next
指向它的父母 - 在这个插件。值得一提的是,这样的方案建立和链接没有错误。如果我在main.c
做
extern struct plugin_iface IfaceList;
,它解决了在建并链接了最新的插件实例。
现在我想实现的是让所有的变量情况下,形成一个链表。该列表中的每个节点都将代表一个插件的接口。这在C中甚至可能吗?我想避免任何配置时生成头文件。
编译期间链接?或运行时间? –
我会模仿类似Linux的设备驱动程序的注册方案。一个插件创建自己的'struct plugin_iface'并将其传递给某个实体,该实体可能使用链接列表来管理这些实体。这样,插件不会受到链表的实现细节的困扰,而只需执行'register_plugin(&plugin_iface)'。 – Downvoter
@Downvoter该方法的问题是必须执行插件中的代码才能调用注册函数。我们不能简单地从每个插件调用一个函数,因为我们在'main'时不知道他们的名字。 –