C 重构深层函数调用

C 重构深层函数调用,c,algorithm,state-machine,C,Algorithm,State Machine,我致力于数据处理,它可以处理分层数据 与我目前的工作最相似的是网络处理。数据包是分层的,每一层都由一个特定的函数单独处理。调用更深层的下一个函数将在当前层中计算。在某些情况下,调用堆栈可能以再次调用以前调用的函数的方式显示递归行为(例如a()->B()->C()->B()->D()…) 目前,我采用以下方式: void func_N(void) { // get next layer info switch (next) { case A: func_A(

我致力于数据处理,它可以处理分层数据

与我目前的工作最相似的是网络处理。数据包是分层的,每一层都由一个特定的函数单独处理。调用更深层的下一个函数将在当前层中计算。在某些情况下,调用堆栈可能以再次调用以前调用的函数的方式显示递归行为(例如a()->B()->C()->B()->D()…)

目前,我采用以下方式:

void func_N(void)
{
    // get next layer info
    switch (next) {
    case A:
        func_A();
        break;
    case B:
        func_B();
        break;
    default:
        finalize()
    }
}
我可以保证呼叫链不会变得任意长。虽然有相当高的技术限制。调用堆栈的深度取决于我们可以对其进行一些假设的数据。我需要一些新的统计数据,但最多10个电话的深度将是一个很好的估计

我希望你能明白。工作正常,但通过调用堆栈的潜在轨迹越复杂,维护起来就越困难


然而,可维护性不是我主要关心的问题。在这种情况下,性能很重要。对于这个问题,还有其他更快更适合的编程技术吗?

您是不是在以一种非常神秘的方式谈论状态机?还是关于递归?我不明白你说的“这个问题”是什么意思。是否存在性能问题?你分析过你的代码吗?
https://stackoverflow.com/questions/133214/is-there-a-typical-state-machine-implementation-pattern
maybeCreate一个数组
struct{next_type_t next;void(*f_to_call)(void);}nexts[]={{A,func_A},{B,func_B},…}。然后在nexts数组中搜索next的值并调用相应的函数。这是map+接口抽象的C实现,更易于维护。您可能对中的状态模式感兴趣。您说过可以保证调用深度不会变得任意长。你的意思是保证它不会无限长吗?有一个已知的限制吗?