远程功能呼叫控制

时间:2013-11-18 11:04:46

标签: c function pointers struct global-variables

我有一个函数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处理程序中。

解决方案是什么?

2 个答案:

答案 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);