我正致力于在 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/