我有一个函数fun10(),我修改为函数fun11()。
函数fun1()调用fun2(),调用fun3(),调用fun4(),......等等,直到fun9()调用fun10()。
由于我将fun10()修改为fun11(),fun9()调用fun11()而不是fun10()。
但是,根据我在fun1()中的决定,我希望能够选择是否要运行fun10()或fun11()。
源代码分布在多个文件夹中的多个.c和.h文件中。
使用了许多C编程技巧,例如函数指针作为参数传递,不透明指向struct中的子结构,struct和typedef在多个级别,类型化无效指针,它们是不透明的处理程序,tailq函数迭代,后向指针,可能的指针内存分配等。
我尝试使用全局变量作为extern的标志,但它不起作用(错误'未知符号')可能是因为fun1()无法识别fun10()。
复制中间的每个函数似乎太多了,特别是当函数可以包含数百行时。我觉得这种重复并不好。
我没有尝试修改参数的数量,例如将fun3(a,b)更改为fun3(a,b,int flag = 0)。会有什么副作用?
我试图将标志压缩到其中一个变量中,这些变量通常是结构指针,但它似乎完全令人困惑,因为不同的结构指针从一个函数传递给另一个函数。 fun10()中的最后一个struct参数'似乎'是原始fun1()中struct参数的一个子集,但它包含在原始struct定义的void指针/ opaque处理程序中。
解决方案是什么?
答案 0 :(得分:0)
fun1()
永远不会对fun2()
如何实现其正在做的事情感兴趣。它应该只关心它按照规范工作。它甚至不应该知道fun3()
存在,而不是fun11()
。
以后不会吃掉你的大脑的唯一行动方案是让f1()
在参数中通过f2()
对f2()
所需要做的决定。
当然,f3()
和{{1}}也是如此。所以你需要通过10个级别的调用来追加一个额外的参数。没什么大不了的。
答案 1 :(得分:0)
您可以使用define指令
#define FCT10
#ifdef FCT10
#define FCT_TO_BE_USED(x) fct_10(x)
#else
#define FCT_TO_BE_USED(x) fct_11(x)
#endif
LE:也许并不明显 - 在fct_09中你将使用FCT_TO_BE_USED(x);