找不到标识符?

时间:2012-10-29 20:25:34

标签: 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)]);
    getchar();
}

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

3 个答案:

答案 0 :(得分:6)

在C中,所有内容必须在使用前声明。所以你必须在main之前为Rekurzija添加一个声明:

int Rekurzija(int);

这只是告诉编译器,当它稍后看到Rekurzija调用时,这是一个函数调用,它接受一个int并返回一个int。这就是处理调用所需要的全部内容,定义可以在其他地方,例如在您的情况下主要,或者甚至在另一个文件中,这是非常常见的(在.h文件中进行删除,在.c文件中定义)

答案 1 :(得分:5)

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

所以你应该在你的包括之后添加以下内容:

int Rekurzija(int niz);

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

答案 2 :(得分:1)

在C中,您必须在引用实体之前声明它们。

您需要添加:

int Rekurzija(int niz);

告诉编译器Rekurzija存在,它具有什么样的属性(例如,它是一个带有int参数和结果的函数)作为" forward"主要功能之前的声明。