相互调用的函数,在另一个函数中声明

时间:2018-11-16 19:52:06

标签: c function recursion

我在另一个函数内部有两个互相调用的函数:

int main(){
    void aaa();

    void b(){
        aaa();
    }

    void aaa(){
        b();
    }

    aaa();
}

(是的,此示例将陷入无限循环或导致堆栈溢出)

编译器抛出错误:static declaration of 'aaa' follows non-static declaration

如果我将函数声明移到另一个函数之外,它就可以工作(但是我不能这样做,因为那些函数需要访问main的局部变量)

有可能做这项工作吗?

1 个答案:

答案 0 :(得分:0)

C不支持嵌套函数,也不支持闭包。

解决您实际问题的一种方法是将共享状态(在这种情况下,您提到的main的局部变量)定义为struct,然后具有此struct类型的变量,并将其作为使用它的函数的指针传递

您没有在问题中显示局部变量代码,因此我没有在写任何示例。如果需要示例,请使用更多代码编辑问题。


另一种解决方案是只使用全局(最好是静态)变量,该变量在其他函数和main中都使用。我的意思是,由于main不是正常函数(例如,不能通过标准递归调用),所以它的局部变量无论如何最终都是唯一的对象,所以这只是范围和可见性的问题,几乎没有功能差异。