5

经过两年的 C#,我尝试了 C,但我遇到了一些“菜鸟”错误。

我试图用递归来反转一个数组,我有这个错误:

错误 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);
}
4

3 回答 3

6

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

int Rekurzija(int);

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

于 2012-10-29T20:27:25.887 回答
5

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

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

int Rekurzija(int niz);

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

于 2012-10-29T20:26:45.297 回答
1

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

您需要添加:

int Rekurzija(int niz);

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

于 2012-10-29T20:28:15.803 回答