【问题标题】:Function definition not allowed here此处不允许定义函数
【发布时间】:2018-07-24 00:27:21
【问题描述】:

我有以下代码:

#include <stdio.h>
int main()
{
    void echoNumber()
    {
        int num;
        printf("Enter a number:");
        scanf("%d", &num);
        printf("You entered %d", num);
    }
    echoNumber();
    return 0;
}

但是当我尝试编译它时它返回 error: function definition is not allowed here ,我不确定我做错了什么?

【问题讨论】:

  • 报错信息其实是对的……
  • 你不能在另一个函数中定义函数。
  • 我真的不是巨魔,我是第一次学习 C 的课程,刚到函数的部分,他们没有提到这一点
  • @justin 为什么入门课程会提到您不能做某事?教你如何做你能做的事情已经够难的了。有无数的事情你不能做。
  • 请注意(至少某些版本的)GCC 将允许这样做,除非您告诉它不要这样做。它是对 C 的扩展——我认为它不是很有帮助。

标签: c


【解决方案1】:

函数定义在 C 中的 main() 之外

#include <stdio.h>

void echoNumber() {
    int num;

    printf("Enter a number:");
    scanf("%d", &num);
    printf("You entered %d", num);
}

int main() {
    echoNumber();
    return 0;
}

【讨论】:

  • 我觉得我买了一个糟糕的教程,没有提到如何编译和运行一个 c 程序......虽然我很欣赏快速响应
  • @justin 通读these,这将有很大帮助。某处有一篇文章列出了非常好的资源列表,您可能会在阅读这些文章时找到它。
【解决方案2】:

C 没有嵌套函数。将echoNumber 移出main,例如

#include <stdio.h>

void echoNumber()
{
    int num;
    printf("Enter a number:");
    scanf("%d", &num);
    printf("You entered %d", num);
}

int main()
{
    echoNumber();
    return 0;
}

【讨论】:

    【解决方案3】:

    您做错的只是没有意识到 C 不是 Pascal :-) Pascal 具有函数内函数的概念,其中前者的“可见性”仅限于后者。换句话说,你无法从其他任何地方看到内部函数。

    C 中没有在函数中包含函数的功能。与您所拥有的最接近的是:

    #include <stdio.h>
    
    static void echoNumber()
    {
        int num;
        printf("Enter a number:");
        scanf("%d", &num);
        printf("You entered %d", num);
    }
    
    int main()
    {
        echoNumber();
        return 0;
    }
    

    echoNumber 前面的 static 将其“可见性”限制为对文件其余部分的“可见性”。这不像 Pascal 模型那样相当限制,但如果你很好地组织你的代码,它将同样有效。


    你会注意到我在上面引用了可见性这个词。我使用的是通用英语术语(表示“您可以从哪里看到它”),而不是使用前 ISO 标准的术语,因为我发现对于那些没有深入了解该标准的人来说更容易理解。

    【讨论】:

      【解决方案4】:
      #include <stdio.h>
      void echoNumber()
      {
          int num = 0;
          puts("Enter a number:");
          scanf("%d", &num);
          printf("You entered %d", num);
      }
      int main()
      {
      
        echoNumber();
         return 0;
      }
      

      问题是,在 C 中,你声明函数的方式不是这样。除非您打算不声明 echoNumber,而只是意味着代码是本地范围,否则这样做

      int main()
      {
          {
          int num = 0;
          puts("Enter a number:");
          scanf("%d", &num);
          printf("You entered %d", num);
          }
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-31
        相关资源
        最近更新 更多