两个不同的递归空隙是否可以在 C 中相互调用?

is it possible for two different recursive voids to call each other in C?

我正在尝试在 C 中使用两个相互依赖的递归,但是当我编译时出现此错误:

In function 'void Horizontal(int* (*)[1000], int, int, int*)':

[Error] 'Vertical' was not declared in this scope

如果我交换垂直和水平,则水平在此范围内变为未声明

这是我写的代码:

#include <stdio.h>
#include <stdlib.h> 
 void Horizontal(int*m[][1000],int i,int j,int*cpt)
 {
    if(*m[i][j]!=0)
    {
        *m[i][j]=0;
        *cpt++;
        Vertical(&*m,i,j,&*cpt);
        Horizontal(&*m,i,j-1,&*cpt);
        Horizontal(&*m,i,j+1,&*cpt);
    }
 }
 void Vertical(int*m[][1000],int i,int j,int*cpt)
 {
    if(*m[i][j]!=0)
    {
        *m[i][j]=0;
        *cpt++;
        Horizontal(&*m,i,j,&*cpt);
        Vertical(&*m,i-1,j,&*cpt);
        Vertical(&*m,i+1,j,&*cpt);
    }
 }
 int main()
 {

 }

int main() 是空的,因为我只是想检查我的语法

他们可以,但是你需要转发声明函数。

像这样:

// Forward declaration:

void Horizontal( int* m[][1000], int i, int j, int* cpt );

void Vertical( int* m[][1000], int i, int j, int* cpt );

// Function implementation:

void Horizontal(int*m[][1000],int i,int j,int*cpt)
 {
    if(*m[i][j]!=0)
    {
        *m[i][j]=0;
        *cpt++;
        Vertical(&*m,i,j,&*cpt);
        Horizontal(&*m,i,j-1,&*cpt);
        Horizontal(&*m,i,j+1,&*cpt);
    }
 }
 void Vertical(int*m[][1000],int i,int j,int*cpt)
 {
    if(*m[i][j]!=0)
    {
        *m[i][j]=0;
        *cpt++;
        Horizontal(&*m,i,j,&*cpt);
        Vertical(&*m,i-1,j,&*cpt);
        Vertical(&*m,i+1,j,&*cpt);
    }
 }

为了允许其他 *.c 文件使用这些函数,您将这些前向声明放在一个单独的文件(头文件)中,并让您的其他 *.c 文件使用该头文件和链接器处理剩下的事情。

您需要转发声明您的函数。在 Horizontal 函数之前添加:

void Vertical(int*[][1000],int,int,int*);