gpt4 book ai didi

在 C 中创建静态模块接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 15:39:57 25 4
gpt4 key购买 nike

我正在尝试在我的 C 项目中创建一个模块化接口(interface),它允许有选择地构建源文件并添加和删除源文件,而无需更改项目的任何核心组件。我已经在整个网络上搜索了有关如何执行此操作的方法,但找不到任何内容。

在这个阶段我的猜测是,每个模块都有自己的源文件和头文件(module_1.c、module_1.h、module_2.c、module_2.h 等)。每个模块可能必须有一个包含指向所需函数的指针的结构,例如:

struct module_def {
char *name;
void (*module_init) (void);
void (*module_shutdown) (void);
};

我相信核心代码需要访问这些定义结构的数组。我只是不知道如何使用启用模块列表自动生成这样的数组(或任何类似的数组),而无需求助于在构建过程中创建包含所有结构列表的新源文件的困惑脚本。

至少,我认为这应该是这样。

最终,我正在寻找一种在 C 中创建模块化编码接口(interface)的方法,该接口(interface)允许在构建期间有选择地链接单独的模块(源文件或目标文件,这无关紧要)并由主应用程序调用。这是针对嵌入式解决方案的,因此动态加载、共享库等无法工作。

最佳答案

对于 gcc,您可以使用类似的东西:

(例如在 foo_module.c 中)

struct module_def foo_module {
...
};

static void init_module(void) __attribute__ ((constructor));

static void init_module(void) {
register_my_module(&foo_module);
}

你可以把它放在你的每个模块文件中,你的 init_module-functions 应该在初始化时调用(即当 bss 被清除等,在主代码开始之前)。

请注意,这不是可移植的,但适用于许多嵌入式平台,例如使用 avr-gcc 等。

关于在 C 中创建静态模块接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46768109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com