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之外声明这些函数,然后将这些函数内部需要的主要变量作为参数传递呢?哦,我不知道这不是标准的一部分。