我有一个功能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/