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

C 在另一个函数中声明的相互调用的函数,c,function,recursion,C,Function,Recursion,我有两个相互调用的函数,在另一个函数中: int main(){ void aaa(); void b(){ aaa(); } void aaa(){ b(); } aaa(); } (是的,此示例将卡在无限循环中或导致堆栈溢出) 编译器抛出错误:aaa的静态声明跟在非静态声明之后 如果我将函数声明移到另一个函数之外,它就会工作(但我不能这样做,因为这些函数需要访问main的局部变量) 有可能做到这一点吗?C

我有两个相互调用的函数,在另一个函数中:

int main(){
    void aaa();

    void b(){
        aaa();
    }

    void aaa(){
        b();
    }

    aaa();
}
(是的,此示例将卡在无限循环中或导致堆栈溢出)

编译器抛出错误:
aaa的静态声明跟在非静态声明之后

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


有可能做到这一点吗?

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

实际问题的一个解决方案是将共享状态(在本例中,您提到的main的局部变量)定义为struct,然后将此struct类型的变量作为指针传递给使用它的函数

您的问题中没有显示局部变量代码,所以我不是在编写任意示例。如果你想要一个例子,请用更多的代码编辑这个问题



另一种解决方案是只使用全局(最好是静态)变量,从其他函数和主函数中使用。我的意思是,因为main不是一个普通函数(例如,标准函数不能递归调用),它的局部变量最终都是唯一的对象,所以这只是范围和可见性的问题,函数之间几乎没有区别。

你不能在标准C中嵌套函数定义。GNU C只支持将其作为扩展。你为什么不在main之外声明这些函数,然后将这些函数内部需要的主要变量作为参数传递呢?哦,我不知道这不是标准的一部分。