我有一个功能fun10(​​),我将其修改为一个功能fun11()。

函数fun1()调用fun2(),该函数调用fun3(),然后调用fun3()等,直到fun9()调用fun10(​​)。

由于我将fun10(​​)修改为fun11(),因此fun9()调用fun11()而不是fun10(​​)。

但是,根据我在fun1()中的决定,我希望能够选择运行fun10(​​)还是fun11()。

源代码分布在多个文件夹中的多个.c和.h文件中。

使用了许多C编程技巧,例如作为参数传递的函数指针,到struct的子结构的不透明指针,多级结构和typedef的不透明指针,作为不透明处理程序的void指针的类型转换,tailq函数迭代,向后指针,指针的可能内存分配等。

我尝试将全局变量用作带有extern的标志,但它不起作用(错误“未知符号”),可能是因为fun1()无法识别fun10(​​)。

在两者之间复制每个函数似乎太多了,尤其是当一个函数可以包含数百行时。我感觉这种重复不好。

我没有尝试修改参数的数量,例如将fun3(a,b)更改为fun3(a,b,int flag = 0)。它会有什么副作用?

我试图将标志压缩到通常是结构指针的变量之一中,但由于将不同的结构指针从一个函数传递到另一个函数,这似乎完全令人困惑。 fun10(​​)中的最终struct参数“似乎”是原始fun1()中struct参数的子集,但它包含在原始struct定义的void指针/不透明处理程序中。

解决办法是什么?

最佳答案

fun1()永远不要对fun2()到底如何实现所做的事情感兴趣。它只应关心它是否按照规范工作。它甚至不应该说fun3()存在,而不是说fun11()

以后不会吃掉脑子的唯一动作就是让f1()将需要做什么的决定传递给参数中的f2()

当然,关于f2()f3()也是如此。因此,您需要通过10个级别的调用来线程化其他参数。没什么大不了的。

关于c - 长途功能通话控制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20046204/

10-09 17:20