【问题标题】:Identifier not found?找不到标识符?
【发布时间】:2012-10-29 20:25:33
【问题描述】:

在使用 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);
}

【问题讨论】:

  • @irabaxter:你用另一个错字编辑了标题中的错字:)
  • @Wug:很高兴有人关注。谢谢。

标签: c function-prototypes


【解决方案1】:

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

int Rekurzija(int);

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

【讨论】:

  • 没问题。完成后记得关闭问题(即勾选其中一个解决方案)。
【解决方案2】:

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

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

int Rekurzija(int niz);

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

【讨论】:

    【解决方案3】:

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

    你需要添加:

    int Rekurzija(int niz);
    

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

    【讨论】:

      猜你喜欢
      • 2013-03-17
      • 2015-03-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多