c - 如何有条件地确定在编译时调用了哪些函数?

标签 c function dynamic c-preprocessor

我正致力于在 C 中实现一个非常非常非常的基本组件系统,但现在我正处于想要“动态”调用一些函数的地步.设置非常简单:主程序只是一个无穷无尽的 while 循环,其中检查了一些条件,并在其中为每个启用的组件调用了一个“处理”函数。

例如,现在它是这样工作的:

while (1) {
  input_process();
  network_process();
  graphics_process();
}

但我想将它分成单独的组件,并以某种方式在中心位置定义使用哪些部分。这可以通过简单的定义来完成,如下所示:

#define HAS_NETWORK
...
while (1) {
  input_process();
#ifdef HAS_NETWORK
  network_process();
#endif
  graphics_process();
}

如您所见,这对于 1 个或可能只有几个组件是可行的,但如果我想对所有这些(输入、网络和图形)以及将来的其他组件执行此操作,我将不得不单独放置#ifdefs 在那里为他们每个人,这很乏味。

在伪代码中,我要完成的是以下内容:

components = {'input', 'network', 'graphics'}
...
foreach component in components
  execute component_process()

这样以后可以很容易地添加组件。 我真的不介意检查是在编译时还是运行时完成(虽然我显然更喜欢编译时,但我可以想象运行时更容易实现)。我什至不知道如何开始。

最佳答案

您需要指向函数的指针,创建指向函数的指针数组并对其进行动态索引。

在这里link关于函数指针。

关于c - 如何有条件地确定在编译时调用了哪些函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1840806/

相关文章:

C语言的邻居查找程序代码

c - 在函数中重新分配输出指针

python - 为什么这段 Python 代码可以正常工作?请解释

php - php中的字符串函数练习

javascript - Firebug 构造函数与用户函数

java - 如何为 java 准备好的语句插入使用表名变量

c - 要在输入值的同一行中获取结果,然后由 scanf 获取

c - 驱动程序使用 inb() 和 outb() 访问端口

PHP根据文件夹结构动态生成命名空间

c - 从文件读取数据以重新分配动态结构数组时出现段错误