C 找不到标识符?

C 找不到标识符?,c,function-prototypes,C,Function Prototypes,在经历了两年的C#之后,我尝试了C,但出现了一些“noob”错误 我尝试使用递归反转数组,但出现以下错误: 错误C3861:未找到“Rekurzija”契约 这是我的代码: #include "stdafx.h" #include "stdio.h" int main() { int niz[] = {1,2,3,4,5,6}; int duzina = sizeof(niz)/sizeof(int); printf("%s",niz[Rekurzija(duzina)

在经历了两年的C#之后,我尝试了C,但出现了一些“noob”错误

我尝试使用递归反转数组,但出现以下错误:

错误C3861:未找到“Rekurzija”契约

这是我的代码:

#include "stdafx.h"
#include "stdio.h"

int main()
{
    int niz[] = {1,2,3,4,5,6};
    int duzina = sizeof(niz)/sizeof(int);
    printf("%s",niz[Rekurzija(duzina)]);
    getchar();
}

int Rekurzija(int niz)
{
    int i = sizeof(niz)/sizeof(int);
    while(i!=0)
        return Rekurzija(i-1);
}

在C语言中,应该在调用它的函数之前列出函数原型

因此,您应该在包含后添加以下内容:

intrekurzija(intniz)


请注意,如果没有原型,事情仍然可以工作;编译器将对原型进行猜测,但如果猜测与函数的实际情况不同,则会出现问题。

在C中,在使用之前必须声明所有内容。因此,您必须在main之前添加Rekurzija声明:

int Rekurzija(int);

这只是告诉编译器,当它稍后看到Rekurzija调用时,这是一个函数调用,它接受一个int并返回一个int。这就是它处理调用所需的全部内容,定义可以在其他地方,例如在您的情况下位于main下面,或者甚至在另一个文件中,这是非常常见的(delcaration在.h文件中,而definition在.c文件中)在C语言中,引用实体之前必须声明实体

您需要添加:

int Rekurzija(int niz);

告诉编译器Rekurzija存在,以及它有什么类型的属性(例如,它是一个具有int参数和结果的函数)作为主函数前面的“前进”声明。

@irabaxter:您用另一个拼写错误编辑了标题中的拼写:)@Wug:很高兴有人注意到了。谢谢,没问题。完成后请记住关闭问题(即勾选其中一个解决方案)。