两个不同的递归空隙是否可以在 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() 是空的,因为我只是想检查我的语法
他们可以,但是你需要转发声明函数。
- https://en.wikipedia.org/wiki/Forward_declaration
- What is 'forward declaration' and the difference between 'typedef struct X' and 'struct X'?
像这样:
// 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*);
我正在尝试在 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() 是空的,因为我只是想检查我的语法
他们可以,但是你需要转发声明函数。
- https://en.wikipedia.org/wiki/Forward_declaration
- What is 'forward declaration' and the difference between 'typedef struct X' and 'struct X'?
像这样:
// 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*);